Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ebotega

O que custa mais processamento nesses códigos?

Recommended Posts

Por acaso existe uma "melhor prática" para o PHP nesses casos? No exemplo abaixo vejam as tags <option>.

 

 

Com o HTML no código PHP com echo...

 

<?php
$pegar_pergunta = mysql_query("SELECT id, pergunta FROM enquete_perguntas") or die(mysql_error());

while( $res_pergunta = mysql_fetch_array( $pegar_pergunta ) )
{
	$id_pergunta	= $res_pergunta[0];
	$pergunta		= $res_pergunta[1];

	echo '<option value="'. $id_pergunta .'">'. htmlentities( $pergunta ) .'</option>';
}
?>

 

 

... ou fechar as tags PHP?

 

<?php
$pegar_pergunta = mysql_query("SELECT id, pergunta FROM enquete_perguntas") or die(mysql_error());

while( $res_pergunta=mysql_fetch_array( $pegar_pergunta ) )
{
	$id_pergunta	= $res_pergunta[0];
	$pergunta 		= $res_pergunta[1];

?>
 <option value="<?php echo $id_pergunta;?>"><?php echo htmlentities( $pergunta ); ?></option>

<?php
}
?>

 

:mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz diferença, as tags só servem pra interpretar o código, tipo, mandando o que tá ali pro interpretador PHP, só isso ..

Mais uma dica, não use esse mysql_, procure usar PDO ou MySQLi

Compartilhar este post


Link para o post
Compartilhar em outros sites

então Andrey, não manjo ainda disso, vou tratar de ler a respeito, mas segue uma dúvida: posso usar mysqli sem alterar o banco mysql que tenho hoje ou preciso tratar o banco de alguma forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

MySQLi e PDO são apenas duas extensões para conectar o MySQL porem, tem suas vantagens, como a MySQLi é uma extensão do MySQL melhorada.

O PDO é um Objeto que permite a conexão com vários Drivers seja Oracle, Firebird, PgSQL, MsSQL .. enfim .. o PDO é bom porque a maioria

dos servidores PHP tem, alem do mais ele é orientado a objetos e bem mais rápido do que o mysql_

Compartilhar este post


Link para o post
Compartilhar em outros sites

orientação a objetos é um obstáculo que tento ultrapassar a algum tempo... mas não dá pra 'escapar' mais disso.

 

beleza, valeu pela breve explicação, agora é botar a mão na massa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara... revirei a net por um exemplo que me mostrasse o uso do foreach para trazer resultados do mysql. Sabe me mostrar um exemplo bem básico como fazer isso, semelhante ao while mas com foreach.

 

No forum abaixo o cara comenta algo sobre a 'vantagem' do while sobre o foreach para trazer resultados do banco.

http://www.webhostingtalk.com/showthread.php?t=519883

 

valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso de ter que usar um ou vários contadores, eu usaria o FOR.

Na minha opnião, fica mais organizado.


$i = 1;
while( $row = mysql_fetch_assoc( $query ) )
{
   echo $i, ' -> ', $row[ 'field' ], '<br/>';
   $i++;
}

for( $i = 1; $row = mysql_fetch_assoc( $query ); $i++ )
{
   echo $i, ' -> ', $row[ 'field' ], '<br/>';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se liga, no JavaScript, o pessoal recomenda não imprimir as coisas dentro de um loop (no seu caso, um while). A recomendação é ir concatenando uma String e depois imprimir tudo. De novo, não tenho certeza se isso dá alguma diferença no PHP.

 

$pegar_pergunta = mysql_query("SELECT id, pergunta FROM enquete_perguntas") or die(mysql_error());
$options = "";
while ($res_pergunta = m ysql_fetch_array($pegar_pergunta)) {
  $id_pergunta = $ res_pergunta[0];
  $pergunta = $ res_pergunta[1];
  $options +=  '<option value="'.$id_pergunta.'">'.htmlentities($pergunta).'</option>';
}
echo $options;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondendo o menino sobre o foreach...

 

Não sei se funciona... mas em teoria:

<?php
foreach(mysql_fetch_assoc($pegar_pergunta) as $res_pergunta) : 
  $id_pergunta    = $res_pergunta[0];
  $pergunta       		= $res_pergunta[1];  
  echo '<option value="'. $id_pergunta .'">'. htmlentities( $pergunta ) .'</option>';
endforeach; 
?>

 

Acredito que fique assim.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se liga, no JavaScript, o pessoal recomenda não imprimir as coisas dentro de um loop (no seu caso, um while). A recomendação é ir concatenando uma String e depois imprimir tudo. De novo, não tenho certeza se isso dá alguma diferença no PHP.

 

$pegar_pergunta = mysql_query("SELECT id, pergunta FROM enquete_perguntas") or die(mysql_error());
$options = "";
while ($res_pergunta = m ysql_fetch_array($pegar_pergunta)) {
  $id_pergunta = $ res_pergunta[0];
  $pergunta = $ res_pergunta[1];
  $options +=  '<option value="'.$id_pergunta.'">'.htmlentities($pergunta).'</option>';
}
echo $options;

Sim, isso faz diferença em PHP. Se não utilizar controle de output buffer, a cada iteração estará acionando a saída de dados. Ver: http://www.php.net/m....outcontrol.php

 

Em versões mais recentes, a opção de utilizar o output buffer é habilitada por padrão, já que o buffer é despejado automaticamente ao final da execução do script php.

 

Já vi muitas implementações utilizando concatenações de strings e echoando ao final. Recomendo fortemente não utilizar isso, uma vez que existem formas mais apropriadas. A prática de concatenação é ruim pois polui o código e é menos eficiente. Ao utilizar output buffer, a implementação pode utilizar "echo" livremente, onde "echo" concatena ao buffer de forma transparente. O mesmo serve para hipertexto fora de tags <?php ... ?>.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz diferença isso amigo, são apenas loops pra percorrer os resultados, no inglês claro, 'iteratores' ..

Em loops com array o foreach faz toda diferença, é só da uma olhada no google ou fazer uns teste por si proprio.

 

cara... revirei a net por um exemplo que me mostrasse o uso do foreach para trazer resultados do mysql. Sabe me mostrar um exemplo bem básico como fazer isso, semelhante ao while mas com foreach.

 

No forum abaixo o cara comenta algo sobre a 'vantagem' do while sobre o foreach para trazer resultados do banco.

http://www.webhostingtalk.com/showthread.php?t=519883

 

valeu...

 

$resultado = mysql_fetch_array($sql);
foreach($resultado as $dado)

 

Eu acho que é isso, pq faz um tempo que nao mexo com mysql_...

 

Dei uma olhada no forum, mas ele cita a vantagem do while se você usar direto com os dados do BD, "So you're best off using a while for use with direct database stuff.", se for com array simples e direto, o foreach é sem duvida bem mais rapido, mas faz do jeito que tu acha melhor, essas diferenças de processamento na maioria dos sites sao imperceptiveis ao usuario, a nao ser q tu queira montar um facebook da vida ou algum grande portal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá:

 

Sobre a forma de exibir o HTML do PHP, tem diferença sim a forma como você faz, se dentro do PHP ou abrindo e fechando as tags.

 

Mas essa diferença é tão pequena que pode ser ignorada. Eu disse pode, se você puder sempre prefira a forma mais eficiente, afinal, quando seu site for acessado, não o será feito apenas por 10 pessoas.

 

Se você ecoar/printar um HTML, o construtor de linguagem será chamado, receberá a string, tentará interpretá-la e só então produzirá algo visível (ou não). É nessa tentativa que ocorre a diferença de performance.

 

O problema é que, mesmo separando as camadas visuais das controladoras, usando a segunda forma vai te dar um "delicioso" código espaguete, de tantas tags que podem vir a ser abertas e fechadas.

 

Basta ponderar se você prefere algo eficiente ou bonito. Pelo menos na View não dá pra ter os dois.

 

Sobre os loops também a diferença de performance sim. E aqui mais significativa do que no item anterior.

 

Faça o teste você mesmo.

 

Crie um arquivo com aqueles contadores microtime() e, antes de exibir o tempo de execução (subtraindo do microtime() inicial), faça um loop grande (mesmo, tipo umas 10 mil iterações ou mais), porém sem nada de mais dentro (um print qualquer já basta).

 

Execute cada um deles e você vai ver a diferença. Dos mais comuns disponíveis, o for e o while são os mais flexíveis (mesmo o for sendo melhor) para ajustes de performance já que você pode fazer o incremento (ou decremento) do iterador de várias formas:

 

$i++

++$i

$i = $i + 1

$i += 1 (essa é a mais rápida)

 

Agora imagine essa velocidade (relativamente lenta) em cima de 10 mil "bobeiras" quando usadas "pra valer", com Model, View, Controller, classes e mais classes e etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu caro, sobre as duas opções acredito numa tese.

Acho viável que você trabalhe seu código não só pensando em você e sim que outras pessoas também vão mexer. Ainda mais no caso de HTML.

Tente isolar o PHP do HTML, se um designer precisar complementar a pagina que esteja trabalhando, não corre o risco de um acidente dele mexer no HTML incluso em seu scrip e colocar uma aspas " no meio onde ele pode acabar por fechar alguma expressão indevidamente.

 

O Resumo de "boa pratica" seria tentar ao máximo não misturar o HTML do PHP.

Ae fica a seu critério.

Pode parecer que fica pesado o código, mas você indentando e mantendo uma organização ao escrever acredito que não vai ter problema.

 

Grande abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz diferença isso amigo, são apenas loops pra percorrer os resultados, no inglês claro, 'iteratores' ..

Não só faz grandes diferenças, como, segundo estudos e testes realizados, a maneira mais rápida de percorrer um array seria usar as funções nativas do PHP. O problema dessa opção é que para percorrer arrays multi-dimensionais fica ruim, mas entre os 4 laços, o foreach é o mais rápido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm, obrigado pela resposta. Recentemente vi o output buffer do Ruby nas funções: p, puts e print. É impressionante como coisas simples fazem toda a diferença no uso de recursos, tanto do servidor como do lado cliente (JS). Há vezes em que simples funções que na prática fazem a mesma, mas que no final consomem dezenas de vezes mais tempo, como o .text() e o .html() do jQuery.

 

Ah, se alguém quiser fazer benchmark de script no JS, use as seguintes funções do console (nem tente no IE):

 

console.time('meu_benchmark');
/* meu loop monstruoso de teste */
console.timeEnd('meu_benchmark');

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.