Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

PHP двойная или одинарная кавычка и конкатенация - что быстрее

#php


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

$text = "Здесь любой текст и переменная $test";


Или второй вариант с помощью конкатенации:

$text = 'Здесь любой текст и переменная '.$test;


Какой вариант будет работать быстрее? И зависит ли разница в скорости от количества
переменных в строке? Просто услышал мнение, что конкатенация занимает больше времени.
Хочется услышать мнение экспертов. 
    


Ответы

Ответ 1



раз уже вчера с @АлексейШиманский затронули тесты, а @StackOverflow поделился ссылкой на древнюю как динозавры статью с какими то тестами от 2008 года, то решил проверить один из этих тестов в 2017м. Железо почти из той же эпохи i7-980x и 10 ГБайт памяти в наличии win10х64, Open Server, проверяем на пхп 5.6 и 7.0.22. запуск тестовых функций несколько переписан. for($i = 1; $i <= 4;$i++){ $f = "quotes_$i"; $ts = microtime(true); call_user_func($f, $_1, $_2, $_3, $_4, $_5, $_iterator); $time = microtime(true) - $ts; print "$f - $time\n"; } тестируются 4 функции, в каждой по 5 млн итераций, в строку подставляется 5 переменных: подстановка в строки вида "qwe $var asd" подстановка в строки вида "qwe {$var} asd" конкатенация с одинарными кавычками 'qwe'.$var.'asd' использование sprintf для пхп 5.6х32 результаты следующие (5 запусков, средний): 1. 4,143 сек 2. 3,827 сек 3. 6,866 сек 4. 12,378 сек при запуске в консоли результат в аналогичный. для пхп 5.6х64 время несколько увеличивается (здесь и далее по 3 запуска, средний) 1. 4,198 сек 2. 4,182 сек 3. 8,646 сек 4. 12,572 сек При переходе на пхп 7.х ситуация кардинально меняется 1. 1,625 сек 2. 1,612 сек 3. 2,862 сек 4. 13,886 сек в отличие от 5.6 для пхп 7.х х64 наблюдается ускорение 1. 1,149 сек 2. 1,156 сек 3. 2,871 сек 4. 12,143 сек отсюда выводы: вызов функции форматирвоания sprintf очевидный аутсайдер, и это понятно, т.к. переключение стека и т.п. тоже требует приличных ресурсов. х64 версия для 5.6. работает несколько дольше, чем х32, хотя в случае пхп 7.х ситуация обратная и выигрывает х64 вариант. вариант с конкатенацией всегда проигрывает варианту с подстановкой в строку, и если для пхп 5.6 в 1.5-2 раза, то для пхп 7 в 2 раза и более. в пхп 7. варианты 1 и 2 подставноки в строку в двойных кавычках идентичны по скорости, хотя в 5.6 первый несколько проигрывал. пхп 7 в 2.5-3.5 раза быстрее в данных операциях чем 5.6.

Ответ 2



Согласно документации логичнее предположить, что пример с одинарной ковычкой будет работать быстрее, так как php не ожидает ни каких переменных и прочего. Однако на моем компьютер iMac (21.5-inch, Late 2012), с установленным MAMPом + php 7.0.22, результаты обоих строк оказались одинаковы, хотя, мой пример не показатален.

Комментариев нет:

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