Производительность конкатенации строк в PHP

Скорость склеивания (конкатенации) строк может быть крайне важна в вашем приложении. HTML страницы в скриптах хранятся в строках и генерируются склеиванием нескольких в одну. Да и без HTML может быть достаточно случаев применения объединения строк.

В PHP не нужны какие то специальные средства, чтобы объединить две строки, для этого используется оператор точка:

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

Также можно использовать функцию implode для получения строки из массива:

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

Если нужно объединить немного строк, тогда не забивайтеголову цифрами и производительностью, а используйте тот способ, который Вам ближе и для Вас понятнее. Все таки читабельность кода важнее призрачного выигрыша в производительности.
Ну а я расскажу о том случае, когда нужно склеить много строк.
Для сравнения возьмем такие куски кода:

  1. $str = '';
  2. for ($i = 30000; $i > 0; $i--) {
  3. 	$str .= 'String concatenation. ';
  4. }

и

  1. $str = '';
  2. $sArr = array();
  3. for ($i = 30000; $i > 0; $i--) {
  4. 	$sArr[] = 'String concatenation. ';
  5. }
  6. $str = implode('', $sArr);

Как вы думаете, какой способ отработает быстрее?

Good news everyone, PHP 5.3 блестяще справляется с обоими тестами. Основные расходы идут на память.
Ну и как ожидалось, способ с объдинением массива выполняется в два раза дольше — тратится время на построение массива. Сама же операция склейки (implode) выполняется сопоставимо с обычной конкатенацией. Что это значит? То, что без разницы какой способ использовать в боевых условиях, когда память выделяется под хранение каждой строки.

Запись опубликована в рубрике PHP & MySQL с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">