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