Сравнение производительности strtr, str_replace, preg_replace.

Добрый день. Сегодня я решил узнать, что работает быстрее: strtr, str_replace или же preg_replace.

Для ленивых: str_replace — самая быстрая функция, на втором месте preg_replace, а уж strtr совсем медленная.

Суть теста.

Замена подстрок запускается в цикле 100000 (сто тысяч) раз.
$str = 'Это невероятно {tag1} история. Она повествует о том как {tag1} женщина разыграла сцену на {tag2}.';$a = null;for ($i = 0; $i < 100000; $i++) {	//$a = strtr($str, array('{tag1}' => $i, '{tag2}' => $i . $i));	//$a = preg_replace('|\{tag1\}|', $i, $str);	//$a = preg_replace('|\{tag2\}|', $i . $i, $str);	//$a = str_replace(array('{tag1}', '{tag2}'), array($i, $i . $i), $str);}


Результаты.
Тест выполнялся в виртуальной машине.
Ubuntu Server 12.04 x64, 4 vCPU, 2.0 GHz, Guaranteed CPU 20%, DDR3 ECC RAM
1333 MHz 4Gb.
PHP 5.4.6-2~precise+1

Тестирование проводилось через веб сервер (nginx+apache) и напрямую из интерпретатора (php -f test.php)
  • strtr — 0.45s*
  • preg_replace- 0.28s*
  • str_replace — 0.14s*

Ещё один момент. В документации strtr написано:
Однако, стоит учесть тот факт, что эта функция максимально эффективна в том случае, если все ключи имеют одинаковый размер.
Так что если мы заменим tag2 на tag22 (например), то время выполнения скрипта увеличится до 0.65s*.


* Все приведенные значения времени в статье являются среднеарифметическим от результатов исследования.

2 комментария

avatar
Это ожидаемый результат. Strtr немного для других целей создавалась, а preg_replace намного более функционален, но менее производителен.
avatar
Все же мне хотелось в этом убедиться.

Оставить комментарий