В моем текущем проекте я собираю одну строку для многих маленьких строк (прямой вывод НЕ является опцией). Было бы более эффективно выполнять множество конкатенаций строк? или я должен добавить детали в массив и взорвать его?
PHP: много конкатений или один взломан?
Ответ 1
Во-первых, примечание - любое из этого не имеет значения в реальном производственном приложении, поскольку временные различия являются поверхностными, а оптимизация приложения должна выполняться в других местах (с сетью, базой данных, файловой системой и т.д.), Это сказано, ради любопытства:
implode
может быть более эффективным конкатенацией, но только если у вас уже есть массив. Если вы этого не сделаете, это, вероятно, будет медленнее, поскольку весь коэффициент усиления будет компенсирован временем, необходимым для создания массива и выделения его элементов. Так что держите его просто:)
Ответ 2
Оптимизация будет мало по сравнению с сетевым трафиком, базами данных, файлами, графикой и т.д. Однако здесь приведена ссылка на тему с сайта.
http://www.sitepoint.com/high-performance-string-concatenation-in-php/
Что быстрее?
Хорошей новостью является то, что PHP5 работает быстро. я проверенная версия 5.3 и youre гораздо больше скорее всего, закончится память, чем опыт работы. Однако метод развязывания массива обычно занимает в два раза больше стандартный оператор конкатенации. требуется сопоставимый период времени объединить строку или построить массив, но функция implode удваивает усилия.
Неудивительно, что PHP оптимизирован для обработка строк и оператор точки будет самой быстрой конкатенацией метод в большинстве случаев.
Ответ 3
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
define('ITERATIONS', 10000);
header('Content-Type: text/plain');
printf("Starting benchmark, over %d iterations:\r\n\r\n", ITERATIONS);
print("Imploding...");
$start = microtime_float();
$list = Array();
for ($_ = 0; $_ < ITERATIONS; $_++)
$list[] = 'a';
$result = implode('',$list);
$end = microtime_float() - $start;
printf("%0.3f seconds\r\n", $end);
unset($list,$result);
print("Concatenating...");
$start = microtime_float();
$result = '';
for ($_ = 0; $_ < ITERATIONS; $_++)
$result .= 'a';
$end = microtime_float() - $start;
printf("%0.3f seconds\r\n", $end);
?>
приводит к тому, что implode длится дольше 99% времени. например.
Starting benchmark, over 10000 iterations:
Imploding...0.007 seconds
Concatenating...0.003 seconds