Jump to content

PHP + SQL: Servidor/código provoca lentidão


watt
 Share

Recommended Posts

Alguem me pode dar uma judinha?

estou a fazer o seguinte site http://www.pixelprog.com/KPC/ e acontece que desde de que as opões do menu cresceram o site ficou muito lento.

o codigo que tenho no menu o seguinte.

			<ul id="navmenu">
	          <?php do { ?>
              <div align="left"></div>
                  <li>
                   <a href="cat.php?val=<?php echo $row_Recordset1['menu1']; ?>"><?php echo $row_Recordset1['menu1']; ?></a> 
							<ul>
							<?php $selecionado = $row_Recordset1['menu1'];
		mysql_select_db($database_bd, $bd);
		$query_Recordset2 = "SELECT * FROM menus WHERE nivel = '2' and menu1='$selecionado'";
		$Recordset2 = mysql_query($query_Recordset2, $bd) or die(mysql_error());
		$row_Recordset2 = mysql_fetch_assoc($Recordset2);
		$totalRows_Recordset2 = mysql_num_rows($Recordset2);
							 ?>
							 <?php do { ?>
							<?php if ( $row_Recordset2['menu2'] <> '')
							  {; ?> 
				<li>
				<a href="cat.php?val=<?php echo $row_Recordset2['menu2']; ?>"><?php echo $row_Recordset2['menu2']; ?></a>

							<ul>
						<?php $selecionado2 = $row_Recordset2['menu2'];
		mysql_select_db($database_bd, $bd);
		$query_Recordset3 = "SELECT * FROM menus WHERE nivel = '3' and menu2='$selecionado2'";
		$Recordset3 = mysql_query($query_Recordset3, $bd) or die(mysql_error());
		$row_Recordset3 = mysql_fetch_assoc($Recordset3);
		$totalRows_Recordset3 = mysql_num_rows($Recordset3);

							 ?>

							 <?php do {?>
							  <?php if ( $row_Recordset3['menu3'] <> '')
							  {; ?> 
					<li>
					<a href="cat.php?val=<?php echo $row_Recordset3['menu3']; ?>"> <?php echo $row_Recordset3['menu3']; ?></a>
					</li>
					<?php }; ?>
					</li>
							<?php } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3)); ?> 
            				</ul>
								<?php }; ?>	
							<?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); ?> 
           				  </ul>
				</div>
                  </li>
	          <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
Link to comment
Share on other sites

Acho que o servidor é que é lento, não acho que este código possa fazer o site ficar lento. Mas depende... Cada caso é um caso

estranho, acho que deve de haver outra razão. o q poderá ser alem de um server lento ?!

Link to comment
Share on other sites

Estive a ver o código de fonte da página e reparei que é muito grande... isso é que deve estar a fazer a pagina ficar lenta porque a pagina está muito pesada.

E as imagens devem estar a fazer a página ficar lenta também.

Link to comment
Share on other sites

Estive a ver o código de fonte da página e reparei que é muito grande... isso é que deve estar a fazer a pagina ficar lenta porque a pagina está muito pesada.

E as imagens devem estar a fazer a página ficar lenta também.

achas ?! é que só comecei a ter este problema qd o meu cresceu, porque antes qd tinha metade do menu, ele era rapido.tipo em 1 segundo no maximo tinha a pagina aberta.

Link to comment
Share on other sites

bem...

epa... devias organizar o código um pouco... está um confusão dos diabos.

abres e fechas tags de seguida umas quantas vezes...

devias tambem mudar de linha de vem em qdo. Acho que no teu caso mais vale usar uma estrutura do tipo:

if ( condiçao ) { código }

tens isso com DO IF... tens k andar a fazer gincanas p abrir e fechar tags php...

anyway... para alem disso n vejo o que podes estar a fazer o sql lento... tens a base de dados no mesmo servidor que o webserver?

é que tas a  usar os dois parametros do mysql_query qdo só precisas de um...

faz a ligação a base de dados no inicio e depois usa somente a função desta forma

mysql_query($query);

é que de outra forma tens que te estar sempre a autenticar o servidor cada vez que fazes um pedido... penso que pode ser isto que te esteja a criar lentidão, pois esse código não tem queries nenhuns que precisem de atenção especial

Experimenta e diz lá se correu bem

Link to comment
Share on other sites

Acho que ele tem que  organizar o código html e não deve juntar o código php com o código html.

E utilizar classes e functions para fazer a conecção com a base de dados para não ter que estar sempre a conectar a msyql, e só conectar quando for preciso fazer um query.

Não aconselho a utilizar if e elses isso só faz aumentar o código php e a desorganizar por vezes.

Link to comment
Share on other sites

será que me podem exemplificar um pouco do codigo usando "E utilizar classes e functions para fazer a conecção com a base de dados para não ter que estar sempre a conectar a msyql, e só conectar quando for preciso fazer um query."

é que ainda estou a começar isto do php, e no inicio tentei fazer umas function, mas correu mal. e agora ao mexer nas querey isto começa-me a atrofiar td.

Link to comment
Share on other sites

ARG!!! Ora cá está um excelente exemplo da porcaria que as linguagens como o PHP e o ASP permitem fazer: uma enorme salganhada de código onde se mistura tudo, desde apresentação até lógica de negócio!

Se o problema aparecer quando os menus cresceram vê a construção do teu HTML e vê a performance da tua bd.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

será que me podem exemplificar um pouco do codigo usando "E utilizar classes e functions para fazer a conecção com a base de dados para não ter que estar sempre a conectar a msyql, e só conectar quando for preciso fazer um query."

é que ainda estou a começar isto do php, e no inicio tentei fazer umas function, mas correu mal. e agora ao mexer nas querey isto começa-me a atrofiar td.

Eu criei esse código a  dois dias atrás para um script que estou a fazer!! Fica aqui para utilizares:

class kinSql
{
        function kinSql( $kinHost, $kinUser, $kinSenha, $kinBD, $Permanente = TRUE ) {
        if($Permanente)
        {
               $this->Conectar = mysql_pconnect( $kinHost, $kinUser, $kinSenha );
              } else {
                $this->Conectar = mysql_connect( $kinHost, $kinUser, $kinSenha );
                }
                if($this->Conectar) {
                     if($kinBD != "")
                     {
                           $this->kinBD = $kinBD;
                           $SelBD = @mysql_select_db( $this->kinBD );
                            if(!$SelBD)
                            {
                                    @mysql_close( $this->Conectar ) ;
                                    $this->Conectar = $SelBD;
                            }
                          return $this->Conectar;
                        }
                 }
                }
}

$bd = new kinSql( $kinHost, $kinUser, $kinSenha, $kinBD, true );

isso conecta e seleciona o banco de dados... só precisas de fazer um include em todas paginas e não precisas conectar outra vez... só precisas de executar os querys.

Tens que ter a variaveis  $kinHost com o host da mysql  $kinUser com o user da mysql $kinSenha com a senha da mysql $kinBD com o nome do banco de dados.

Link to comment
Share on other sites

experimenta ligar-te primeiro, podes usar por exemplo  class do kingless, e depois faz os queries usando apenas como parametro de entrada a string do query.

Link to comment
Share on other sites

No principio da pagina onde tens que executar um query colocas include("ficheiro.php");  (ficheiro.php é o nome do ficheiro onde vai ficar  a class).

É so fazer o include.. e depois podes executar o query normalmente tipo mysql_query("SELECT...");  mysql_fetch_array("...");

Sem ser preciso utilizar mysql_connect nem mysql_select_db

Link to comment
Share on other sites

experimenta ligar-te primeiro, podes usar por exemplo  class do kingless, e depois faz os queries usando apenas como parametro de entrada a string do query.

Eu já tinha dito isso ;)

Link to comment
Share on other sites

pa... esquece as classes... deixas as classes para depois...

usa código deste tipo:

no inicio de cada ficheiro poe isto ( está o mais simples possivel )

muda as variáveis como é obvio

$host="localhost";
$user="gervasio";
$pass="gervasiospass";
$dbname="gervasiosbd";

mysql_connect($host,$user,$pass,);
mysql_select_db($dbname);

depois cada vez que fazes um query faz uma coisa do tipo

$sql="select * from tbls where 1";
mysql_query($sql);

o que há aqui a reter é o facto de passares APENAS UM PARAMETRO NA FUNCAO MYSQL_QUERY pois a ligação já está feita... acho que o que te está a atrasar pode ser o facto de, com o código que tinhas teres que estar sempre a a abrir uma ligação para cada query.

Link to comment
Share on other sites

e depois isto assim n deveria  escrever o resultado ?

    <?php

$sql="select * from produtos where id='4'";

mysql_query($sql);

echo $recordset33['artigo'];

?>

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.