Ir para conteúdo
Fórum Script Brasil
  • 0

long polling, melhorar código


sambuka

Pergunta

Galera tenho o seguintes códigos...

Porém quando abro a pagina em que o código começa a executar suas funções, se eu clicar em um link que saia da pagina, algo relacionado a isso, o site fica pensando como se fosse uma net lenta pra caramba, tipo de 5 a 10s pra sair da page, eu to local host ainda, e já da essa lentidão, tenho medo de quando o site ficar online essa lentidão aumentar muito.

Por favor, que puder dar algum dica, vou ficar realmente agradecido, pra alguns pode ser algo simples, porém eu tenho pouco conhecimento ainda, mas quero melhorar :)..OBRIGADO!

já postei em outro fórum, espero que alguém consiga me ajudar :).

-----------------pagina principal, com ajax --------------------------

<head>
<link href="../css/criapostagem.css" rel="stylesheet">
<?php 
if(isset($_GET['idpagegru'])){
	if(isset($_SESSION['numticket'])){
		if(isset($_SESSION['ticketrand'][$_SESSION['numticket']])){
			if($_SESSION['idpagegru'][$_SESSION['numticket']]==$_GET['idpagegru']){
				$ticket=rand(1,2000);
				$_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket;
			}else{
				$ticket=rand(1,2000);
				$_SESSION['numticket']=$_SESSION['numticket']+1;	
				$_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket;
				$_SESSION['idpagegru'][$_SESSION['numticket']]=$_GET['idpagegru'];
			}
			
		}else{
			$ticket=rand(1,2000);
			$_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket;		
			$_SESSION['idpagegru'][$_SESSION['numticket']]=$_GET['idpagegru'];
		}
	}else{
		$_SESSION['numticket']=0;
		$ticket=rand(1,2000);
		$_SESSION['ticketrand'][$_SESSION['numticket']]=$ticket;		
		$_SESSION['idpagegru'][$_SESSION['numticket']]=$_GET['idpagegru'];
	}
}
for( $x =0, $max = count($_SESSION['idpagegru']); $x < $max; ++$x ) {	
	if($_SESSION['idpagegru'][$x]==$_GET['idpagegru']){
		$ticketreal=$_SESSION['ticketrand'][$x]	;			
	}else{
	}	
}
?>
<script type="text/javascript" language="javascript" src="../js/jquery-2.1.1.js"></script>
<script type="text/javascript">
var permicao = 1; //Variavel que indicara a permicao da funcao "buscar_auxiliar()"    
//Funcao que chamara o arquivo "buscar.php" para varrer o banco
function buscar(binario){
    var busca_ajax;
 
    //Verificao navegador
    if(window.XMLHttpRequest) {
        busca_ajax = new XMLHttpRequest();
    }
    
    else if(window.ActiveXObject) {
        busca_ajax = new ActiveXObject("Microsoft.XMLHTTP");
    }

    // Arquivo PHP juntamente com o valor digitado no campo, e a função "escape()" converte os caracteres especiais em hexadecimal iniciado por "%".
    var url = "consulta/busca_postagem.php?ticket=<?php echo $ticketreal?>&verifica=ok&grupo=<?php echo $grulogcodigo?>&pageativa=<?php echo $_GET['idpagegru']?>";
    
    // Chamada do metodo open e envia os dados para o arquivo buscar.php.
    busca_ajax.open("Get", url, true);

    // Quando o objeto recebe o retorno, chamamos a seguinte função;
    busca_ajax.onreadystatechange = function(){

        //Aguarda o ajax executar
        if(busca_ajax.readyState == 4 && busca_ajax.status == 200) {

            //Resposta retornada pelo "buscar.php" via "echo"
            var resposta = busca_ajax.responseText;
            
            //Verifica se e um conteudo vazio.
            if(resposta != "" && !(resposta.match(/^\s+$/))){

                //Criamos uma "div" com o conteudo encontrado dentro e colocamos tudo dentro da tag "p".
				$("#postbase").html(resposta);
                $("#postbase").find("script").each(function(i) {
                    eval($(this).text());
                });
                permicao = 1; //Coloca 1 para que a função "buscar_auxiliar()" consiga chamar novamente esta função ("buscar(binario)").
            }
                
            else{
                permicao = 1; //Caso algo de errado no "if" coloca a permicao para "1", permitindo outra busca nesta funcao ("buscar(binario)") chamada pela função "buscar_auxiliar()"
            }
            
            busca_ajax.send(null); //Limpa a variavel para que possa ser novamente criado na proxima execucao
        }    
    }    
    busca_ajax.send(null); //Limpa a variavel para que possa ser novamente criado na proxima execucao    
}

//------------------------------------------------------------------------------------
function buscar_auxiliar(){ //Funcao auxiliar que serve para chamar a funcao "buscar(binario)", mas impedindo que a mesma seja chamada novamente antes de realizar o pedido de busca anterior.
    if(permicao != 0){ //Verifica se tem permicao para chamar a funcao "buscar(binario)" (para nao chamar a outra funcao antes que a mesma termine as buscas).
        permicao = 0; //Altera a variavel "permicao" para que este "if" não permita que a funcao "buscar(binario)" não seja chamada antes do tempo.
        buscar(0); //Chama a funcao "buscar(binario)".
    }
}

//------------------------------------------------------------------------------------
var bloqueio= 0; //Variavel usada dentro da funcao "busca_automatica()", para que o botao "busca_ajax automática" chame a funcao "busca_automatica()" apenas uma vez.
if(bloqueio == 0){ //Verifica se a variavel esta com o valor original, evitando que o comando "window.setInterval" seja chamado mais de uma vez.
		window.setInterval("buscar_auxiliar()", 1000); //Funçao ativada automaticamente de tempo em tempo.
		bloqueio = 1; //Muda o valor da variavel, impedindo que o "if" deixe executar novamente o comando "window.setInterval".

}
</script>
<script type="text/javascript" src="../tinymce/js/tinymce/tinymce.min.js"></script>
<script>
tinymce.init({
	selector: "#criapostagem",
	theme: "modern",
	width: '100%',
	height: 100,
	max_height: 100,
	language : 'pt_br',
	menubar : false,
	plugins: "link emoticons textcolor autolink",
	target_list: [{title: 'Nova aba', value: '_blank'}],
	toolbar: "bold italic link image forecolor emoticons", 	
 }); 
</script>

<script type="text/javascript" language="javascript">
$(function($) {
	// Quando o formulário for enviado, essa função é chamada
	$("#formpost").submit(function() {
		// Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação
		var grulogcodigo = $("#grulogcodigo").val();
		var criapostagem =tinyMCE.get('criapostagem').getContent();
		var catpos = $("#catpos").val();
		$.post('cadastro/procpostagem.php', {grulogcodigo: grulogcodigo, criapostagem: criapostagem, catpos: catpos }, function(resposta) {
		tinyMCE.activeEditor.setContent('<span></span>');
		$("#catpos").val("9999");
		$("#postok").html('Postagem efetuada!');	
		$("#postok").fadeOut(2000);
				
		});
	});
});
</script>
</head>
<?php
$buscacatpos =$linkbd->query("SELECT * FROM cat_postagem ORDER BY catposnome");
$buscacatpos->execute();
	for ($i=0; $rowcatpos = $buscacatpos->fetch(); $i++) {
  		$arrcatpos[$rowcatpos['catposcodigo']] = $rowcatpos['catposnome'];
	}
?>
<section id="basecriapost">
<form action='javascript:func()' id="formpost" method='post' name='reenvia'>
	<input type="hidden" id="grulogcodigo" value="<?php echo $grulogcodigo ?>">
    	<ul id="textaareapost"><textarea id="criapostagem" name="criapostagem"> </textarea></ul>
        <ul id="opcareapost">
        <li id="titcamp">Categoria</li>
        <li id="lislt">
            <select name="catpos" id="catpos">
            <option value="9999">Geral</option>
                <?php foreach ($arrcatpos as $codcatpos => $nomcatpos) {
                  echo "<option value='{$codcatpos}'>{$nomcatpos}</option>";
                }?>
            </select>
                <p id="infocatpos">Selecione a categoria da postagem</p>
        </li>
        <li id="libt"><input type="submit" id="btpost" name="enviapost" value="Postar"></li>
    </ul>
 </form>
</section>
<div id="postok"> </div>
<div id="postbase">  

</div>
<?php session_write_close();?>



---------------------Pagina php que é chamada -----------------------------

<?php
session_start();
/**
 *  tempo de sleep do sistema
 *  quanto maior o tempo, menos processamento é utilizado,
 *  entretanto tem um maior o tempo de espera para a resposta
 **/

for( $x =0, $max = count($_SESSION['idpagegru']); $x < $max; ++$x ) {
	if($_SESSION['idpagegru'][$x]==$_GET['pageativa']){			
		if(isset($_SESSION['ticket'][$x])){
			if($_SESSION['ticket'][$x]==$_GET['ticket']){
				$sleepTime =rand(5,10); //segundos
			}else{
				$sleepTime = 1; //segundos
			}		
		}else{
			$sleepTime = 1;//segundos
		}		
	}
}
/** tempo de execução definido para o script **/
$executionTime = 100;//segundos

/** caso não estiver em safe mode, pode realizar alterações no tempo de execução do script **/
if(!ini_get('safe_mode')) {
    
    /** verifica se o limite de tempo para execução de script definido no servidor é menor que o definido em $executionTime **/
    if(ini_get('max_execution_time') < $executionTime) {
        
        /** altera o limite de processamento para o tempo definido em $executionTime **/
        set_time_limit($executionTime);
    } else {
        
        /** caso o tempo já definido for maior, utiliza-se dele para os testes **/
        $executionTime = ini_get('max_execution_time');
    }
} else {
    
    /** caso servidor estiver em safe mode, recupera o tempo de execução definido pelo servidor **/
    $executionTime = ini_get('max_execution_time');
}

//executa caso a função URL envie 'ok' como paramero evitando execuções caso o arquivo seja chamado por outros meios.
if($_GET['verifica'] == 'ok'){
$time = time();
sleep($sleepTime);		
for( $x =0, $max = count($_SESSION['idpagegru']); $x < $max; ++$x ) {
	if($_SESSION['idpagegru'][$x]==$_GET['pageativa']){			
		if(isset($_SESSION['ticket'][$x])){
			if($_SESSION['ticket'][$x]==$_GET['ticket']){
				include 'busca_postagem_baseB.php';
			}else{
				$_SESSION['ticket'][$x]=$_GET['ticket'];
				include 'busca_postagem_baseA.php';	
			}		
		}else{
			$_SESSION['ticket'][$x]=$_GET['ticket'];
			include 'busca_postagem_baseA.php';	
		}		
	}
}

if((time() - $time) >= ($executionTime - ($sleepTime + 1))) {
	break;
} 
$linkbd = null;
}		
?>
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...