PHP: много конкатений или один взломан?

В моем текущем проекте я собираю одну строку для многих маленьких строк (прямой вывод НЕ является опцией). Было бы более эффективно выполнять множество конкатенаций строк? или я должен добавить детали в массив и взорвать его?

Во-первых, примечание стороны – любое из этого не имеет значения в реальном производственном приложении, поскольку временные различия являются поверхностными, а оптимизация приложения должна выполняться в других местах (работа с сетью, базой данных, файловой системой и т. Д.). Говоря это, ради любопытства:

implode может быть более эффективным конкатенацией, но только если у вас уже есть массив. Если вы этого не сделаете, это, вероятно, будет медленнее, поскольку весь коэффициент усиления будет компенсирован временем, необходимым для создания массива и выделения его элементов. Так держать это просто 🙂

 <?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); ?> с <?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 

Оптимизация будет мало по сравнению с сетевым трафиком, базами данных, файлами, графикой и т. Д. Однако здесь приведена ссылка на тему с сайта.

http://www.sitepoint.com/high-performance-string-concatenation-in-php/

Что быстрее?

Хорошей новостью является то, что PHP5 работает быстро. Я тестировал версию 5.3, и у вас гораздо больше шансов исчерпать память, чем проблемы с производительностью. Тем не менее, метод размножения массива обычно занимает в два раза больше, чем стандартный оператор конкатенации. Для объединения строки или построения массива требуется сопоставимый период времени, но функция implode удваивает усилия.

Неудивительно, что PHP оптимизирован для обработки строк, и в большинстве случаев оператор точки будет самым быстрым методом конкатенации.