Статьи

Высокопроизводительная конкатенация строк в PHP

Недавно мы рассмотрели сложности быстрой конкатенации строк в JavaScript, поэтому я подумал, что было бы полезно повторить упражнение для PHP. Это может быть более важным для вашего приложения: большие строковые операции часто обрабатываются на сервере при создании HTML-страниц.

В стандартной установке PHP нет специальных библиотек, а конкатенация строк реализована с помощью оператора точки:


$str = 'a' . 'b';
$str .= 'c';

Вы также можете присоединить массив строк, используя функцию implode (или ее псевдоним, join ):

 
$str = implode(array('a', 'b', 'c'));

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

Конкатенация многих строк

Рассмотрим следующие функционально идентичные примеры. Первый использует оператор конкатенации строк:

 
// standard string append
$str = '';
for ($i = 30000; $i > 0; $i--) {
	$str .= 'String concatenation. ';
}

Второй использует массив массива:

 
// array join
$str = '';
$sArr = array();
for ($i = 30000; $i > 0; $i--) {
	$sArr[] = 'String concatenation. ';
}
$str = implode($sArr);

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

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

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