Конкатенация строк PHP — «$a $b» против $a .« » .$b - производительность

StackOverflow https://stackoverflow.com/questions/1813673

Вопрос

Есть ли разница в скорости, скажем:

$newstring = "$a и $b пошли посмотреть $c";

и

$newstring = $а." и " .$б.«вышел посмотреть».$с;

и если да, то почему?

Это было полезно?

Решение

В зависимости в версии PHP это зависит от того, насколько секунда быстрее, если вы пишете это так:$newstring = $a . ' and ' . $b . ' went out to see ' . $c;

PHP — это очень непоследовательный от версии к версии и от сборки к сборке, когда дело доходит до производительности, вам придется проверить ее самостоятельно.Следует сказать, что это также зависит от типа $a, $b и $c, как вы можете видеть ниже.

Когда вы используете ", PHP анализирует строку, чтобы увидеть, есть ли внутри нее какие-либо переменные/заполнители, но если вы используете только ' PHP рассматривает его как простую строку без какой-либо дальнейшей обработки.Так что в целом ' должно быть быстрее.По крайней мере в теории.На практике вы должен тест.


Результаты (в секундах):

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

Использование этого кода с 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 />';

?>

Другие советы

Вероятно, будет разница в скорости, поскольку это два разных синтаксиса.Вам нужно спросить, важна ли разница.В данном случае нет, я не думаю, что вам стоит волноваться.Разница будет слишком незначительной.

Я бы порекомендовал вам делать то, что визуально имеет для вас наибольший смысл."$a and $b went out to see $c«может быть немного запутанно, глядя на это.Если вы хотите пойти по этому пути, я бы предложил заключить ваши переменные в фигурные скобки:"{$a} and {$b} went out to see {$c}".

Я провел быстрый тест, и, как говорили другие, результаты были очень противоречивыми.Я не заметил никакого прироста производительности при использовании одинарных кавычек вместо двойных.Я думаю, что все зависит от предпочтений.

Возможно, вы захотите придерживаться одного типа кавычек для своего стиля кодирования, и если вы это сделаете, выберите двойные кавычки.Функция замены пригодится чаще, чем вы думаете.

Я положил тестовый код на github.

Если вас беспокоит скорость объединения строк на этом уровне, вы используете неправильный язык.Скомпилируйте приложение на C для этого варианта использования и вызовите его в своем PHP-скрипте, если это возможно. Действительно является узким местом.

Да, есть, однако разница между ними очень незначительна.

$newstring = "$a and $b went out to see $c";

и

$newstring = $a . " and " . $b . " went out to see " . $c;

Если вы использовали:

$newstring = $a . ' and ' . $b . ' went out to see ' . $c;

Разница была бы немного больше (но, вероятно, все же незначительна), причина в том, что, если я правильно помню (я могу ошибаться), PHP сканирует и анализирует содержимое в двойных кавычках на предмет переменных и специальных символов (\ t, и т. д.), а при использовании одинарных кавычек он не анализирует переменные или специальные символы, поэтому может быть небольшое увеличение скорости.

Почему бы вам не протестировать это и не сравнить разницу?Цифры не лгут: если вы обнаружите, что один работает лучше другого, вам следует спросить, почему.

нет НИКАКОЙ разницы, и точка.;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top