PHP: много конкатов или один взрыв? - PullRequest
14 голосов
/ 21 декабря 2010

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

Ответы [ 3 ]

15 голосов
/ 21 декабря 2010

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

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

9 голосов
/ 21 декабря 2010
<?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);
?>

приводит к увеличению времени взрыва в 99% случаев.например,

Starting benchmark, over 10000 iterations:

Imploding...0.007 seconds
Concatenating...0.003 seconds
8 голосов
/ 21 декабря 2010

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

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

Какой самый быстрый?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...