<?php $time = microtime(true); $a = array(); for($i = 0; $i < 1000000; $i++) { $s = < тестовая строка >; $a[$i] = $s; } echo "Time: ".ceil(1000 * (microtime(true) - $time)) ." msec\nMemory consumption: ".ceil(memory_get_usage(true) / 1024 / 1024)." Mbytes\n";
В качестве тестовой строки я подставлял то или иное выражение, и записывал, сколько миллисекунд выполнялся скрипт, и сколько памяти пожрал. Записывал я обычно выполнение третьего-четвёртого выполнения подряд, чтоб там успело всё просраться и закешироваться, если надо. Итак, вот результаты тестов на PHP 5.4:
'qwerty asd' - 272 msec, 261 MBytes
"qwerty asd" - 272 msec, 261 MBytes
'qwerty $ asd' - 273 msec, 261 MBytes
"qwerty $ asd" - 271 msec, 261 MBytes
'qwerty $i asd' - 271 msec, 261 MBytes
"qwerty $i asd" - 427 msec, 269 MBytes - ага, вот тут интерпретатор делает стойку и вкорячивает значение переменной в строку вместо её названия. То есть только в том случае, если в строке попадается знак доллара, после которого идут буквы, только тогда строка в двойных кавычках медленнее, и то по понятной причине. Во всех остальных случаях ничего подобного. Для сравнения вариант с конкатенацией:
"qwerty asd".$i - 362 msec, 269 MBytes
Ну и напоследок я сейчас разобью сердца некоторых похапашников. Извините, ребята.
sprintf('qwerty %i asd', $i) - 563 msec, 475 MBytes
sprintf('qwerty %s asd', $i) - 664 msec, 475 MBytes
Отсюда выводы - пользоваться строками с одинарными и двойными кавычками можно как угодно, они одинаково "быстрые", вывод переменной в строке и sprintf лучше заменять конкатенацией, где можно.
Оригинал записи http://blog.axshavan.cz/2014/08/php-quoted-strings-speed.html