2013-06-09 6 views
4

Я работаю, чтобы оптимизировать мой PHP код и обнаружил, что вы можете ускорить вторя в этих отношениях - именно, вы можете заменить echo "The name of the user is $name" . "."; с:Конкатенация, несколько параметров или sprintf?

  • echo 'The name of the user is '.$name.'.';
  • echo "The name of the user is", $name, ".";
  • echo sprintf("The name of the user is %s", $name);

Какой из них самый быстрый? Я бы хотел не только увидеть контрольные показатели, но и техническую разъяснительную работу, если это возможно.

+0

И вы не обнаружили, что повторение списка аргументов (разделенных запятыми) является пикосекундой быстрее, чем повторение ряда значений, связанных с точкой? –

+8

Это действительно микро-оптимизация; вы уже оптимизировали все действительно дорогие элементы в своем скрипте? –

+1

Оцените это, и вы это знаете. – Gumbo

ответ

11

Во-первых, это микро-оптимизация, и вы, вероятно, лучше платите за более быстрый сервер и разрабатываете больше продуктов, а затем тратите часы и часы на микро-оптимизацию. Однако, по мнению http://micro-optimization.com/ вот результаты:

Sprintf() происходит медленнее, чем двойные кавычки на 138.68% (в 1,4 раза медленнее)

и

Sprintf() медленнее, чем одинарные котировки на 163,72% (в 1,6 раза медленнее)

+0

Спасибо за указание на этот сайт. –

+0

Согласен с этим ответом. Что касается двойных и одинарных кавычек и оператора конкатенации, я бы просто рекомендовал использовать стандартизованный подход, который соответствует вашему стилю кода. – foochow

+0

Кроме того, одинарные кавычки превосходят двойные кавычки на 14%. – untill

3

Приведенные выше комментарии являются релевантными. Есть лучшие способы оптимизации вашего кода.

Тем не менее, лучшие способы оптимизации строк - это поместить их в список и затем объединить список. Хорошая отправная точка. Посмотрите на this post.

3

Вариант с использованием sprintf() вполне уверен, что самый медленный из всех, поскольку вызовы функций в PHP довольно дороги, и sprintf() придется разбирать строку формата. Используя что-то вроде echo "abc ", $n, " xyz";, фактически компилируется в три одиночных кода ZEND_ECHO, а это значит, что выходной слой вызывается несколько раз, что может быть довольно медленным, в зависимости от используемого SAPI. Не имеет большого значения, используете ли вы echo "abc $n xyz"; или echo "abc " . $n . " xyz";, поскольку они оба скомпилируются в операции кокатинации.

Смежные вопросы