PHP concatenação de String - “$ a $ b” vs $ a. “”. $ B - desempenho
-
06-07-2019 - |
Pergunta
Existe uma diferença de velocidade entre, digamos:
$ newString = "$ a e $ b saiu para ver $ c";
e
$ newString = $ a. "E". $ B. "Saiu para ver". $ C;
e em caso afirmativo, por quê?
Solução
Dependendo na versão PHP, que varia de acordo com o quanto o segundo é mais rápido se você escrevê-lo como:
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
PHP é muito inconsistente de versão para versão e construção para construir quando se trata de desempenho, você tem que testá-lo por si mesmo.
O que nees a ser dito é que ele também depende do tipo de $a
, $b
e $c
, como você pode ver abaixo.
Quando você usa "
, PHP analisa a cadeia para ver se existem quaisquer variáveis ??/ espaços reservados utilizados no interior do mesmo, mas se você usar apenas trata PHP '
-lo como uma seqüência simples sem qualquer processamento adicional. Então, geralmente '
deve ser mais rápido. Pelo menos em teoria. Na prática, você deve teste.
Os resultados (em segundos):
a, b, c are integers:
all inside " : 1.2370789051056
split up using " : 1.2362520694733
split up using ' : 1.2344131469727
a, b, c are strings:
all inside " : 0.67671513557434
split up using " : 0.7719099521637
split up using ' : 0.78600907325745 <--- this is always the slowest in the group. PHP, 'nough said
Usando este código com o Zend Server CE PHP 5.3:
<?php
echo 'a, b, c are integers:<br />';
$a = $b = $c = 123;
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br /><br />a, b, c are strings:<br />';
$a = $b = $c = '123';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';
$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br />';
?>
Outras dicas
É provável que haja uma diferença de velocidade, já que é duas sintaxes diferentes. O que você precisa perguntar é se a diferença é importante. Neste caso, não, eu não acho que você precisa se preocupar. A diferença seria muito insignificante.
Eu recomendo que você fazer o que faz mais sentido para você visualmente. "$a and $b went out to see $c
" pode ser um pouco confuso quando olhar para ele. Se você queria ir por esse caminho, eu sugiro por chavetas em torno de suas variáveis:. "{$a} and {$b} went out to see {$c}
"
Eu fiz uma referência rápida, e como já foi dito, os resultados foram muito inconsistente. Eu não notei qualquer ganho de desempenho usando aspas simples em vez das duplas. Meu palpite é que tudo se resume a preferência.
Você pode querer ficar com um tipo de cotação para o seu estilo de codificação, e se o fizer, escolha aspas duplas. O recurso de substituição vem a calhar com mais freqüência do que você pensa.
Eu coloquei o código de referência no github .
Se você está preocupado com a velocidade da concatenations cordas, a este nível, você está usando a linguagem errada. Compilar uma aplicação em C para este caso de uso e chamada que no seu script PHP, se este realmente é um gargalo.
Sim, há, no entanto, a diferença é muito insignificante entre
$newstring = "$a and $b went out to see $c";
e
$newstring = $a . " and " . $b . " went out to see " . $c;
Se você usou:
$newstring = $a . ' and ' . $b . ' went out to see ' . $c;
A diferença seria ligeiramente maior (mas provavelmente ainda insignificante), a razão para isso é que, se bem me lembro (eu posso estar errado sobre isso), que PHP scans e analisa o conteúdo dentro de aspas duplas para variáveis ??e especial caracteres (\ t, \ n e assim por diante) e ao usar aspas simples que não analisa as variáveis ??ou caracteres especiais, portanto, pode haver um ligeiro aumento na velocidade.
Por que você não testá-lo e comparar a diferença? Os números não mentem, se você achar que um desempenho melhor do que o outro, então você deve perguntar o porquê.
Não há nenhuma diferença, período. ;)