Что лучше по производительности: строки в двойных кавычках с переменными или строки в одинарных кавычках с конкатенациями? - PullRequest
5 голосов
/ 21 августа 2009

Я знаю, что использование одинарных кавычек вокруг строки в PHP быстрее, чем использование двойных кавычек, потому что PHP не нужно проверять наличие переменных в одной строке в кавычках. Мой вопрос, который будет работать лучше:

A) Строка в двойных кавычках с переменными:

echo "foo bar $baz";

или

B) Кавычки с конкатенированной переменной:

echo 'foo bar ' . $baz;

Ответы [ 7 ]

6 голосов
/ 21 августа 2009

Я сделал тест этого в блоге, над которым я работал некоторое время назад. Однако, как я понял, существует множество переменных. Главный из них:

  1. Сколько сочинений вы делаете? Каждый раз, когда вы делаете конкатенацию, PHP повторно анализирует всю строку (или мне так сказали). Таким образом, 1 объединение может быть быстрее, а 6 - значительно медленнее.
  2. Тип данных. Хотя я лично не тестировал этот файл, мне сказали, что тип данных, который объединяется, также имеет значение, хотя я не уверен, насколько.

В общем, я бы сказал, что на самом деле не так уж важно для вас беспокоиться об этом. Вообще говоря, заметная разница будет только в том случае, если вы пишете огромный сайт (например, MySpace, Facebook, Flickr и т. Д.), И обычно к этому моменту у вас так много аппаратного обеспечения, что вещь с одинарными и двойными кавычками снова становится неактуальной .

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

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

3 голосов
/ 21 августа 2009

Я искренне согласен с Джонатаном Сэмпсоном по этому вопросу, но есть решение, которое, я считаю, быстрее, чем те, которые вы опубликовали. Использование нескольких аргументов с echo:

echo 'foo bar', $baz;

Это применимо только при использовании оператора echo, в любом другом контексте конкатенация, вероятно, лучше, но я стремлюсь к удобочитаемости в этом, поэтому я использую интерполяцию, когда это возможно.

3 голосов
/ 21 августа 2009

Честно говоря, я не думаю, что вам нужно тщательно изучать это соглашение, чтобы сохранить производительность. Но, как бы то ни было, думаю, я вспомнил, что читал, что переменные внутри строк менее эффективны (заметьте, это незначительно и, на мой взгляд, не проблема), чем конкатенация.

2 голосов
/ 21 августа 2009

Я проверил время (микротайм) на моем Vista / php5-боксе с двумя циклами, один для 'и один для'.

На 100 итераций: - одинарные кавычки: 0,000139 - двойные кавычки: 0,000228

На 1000 итераций: - одинарные кавычки: 0,002377 - двойные кавычки: 0,002056

На 2000 итераций: - одинарные кавычки: 0,003562 - двойные кавычки: 0,010041

EDIT: также временное эхо 'Foo', $ bar; 100 итераций = 0,000107, 1000 итераций = 0,001381, 2000 итераций = 0,022434.

echo 'Foo', $ bar; самый быстрый на 100 и 1000 итераций, но по какой-то причине он самый медленный на 2000 итераций ...?

0 голосов
/ 21 августа 2009

Вот более старая статья, последний раз обновленный в марте 2007 года, но она показывает, что разница в производительности действительно низкая: Двойные PHP по сравнению с одинарными кавычками Дэйва Дэша

Я недавно прочитал другую статью (хотя не могу найти ее снова), в которой даже говорится, что есть некоторые обстоятельства, когда двойные кавычки могут быть быстрее, чем одиночные кавычки. Не уверен, что это действительно правильно.

Так что меня больше беспокоит читаемость вашего кода. Если вы поместите переменные в кавычки, их будет сложнее прочитать / найти, если текст будет больше.

0 голосов
/ 21 августа 2009

Некоторое время назад я читал статью, в которой кто-то действительно ее тестировал.

Был сделан вывод, что одинарные кавычки более эффективны, но, как указывают два других ответа, разница в производительности будет недостаточной, чтобы беспокоиться.

0 голосов
/ 21 августа 2009

Без тестирования (что является единственным подходящим способом решения таких проблем) я бы сказал, строки в одинарных кавычках с конкатенацией, потому что строки не нужно анализировать Но это очень зависит от реализации.

И строки в двойных кавычках имеют меньше визуального беспорядка и беспорядка. Так что я бы присоединился к Джонатану, сказав, что разница в производительности, вероятно, не настолько значительна, что вам следует об этом беспокоиться; скорее идите по пути, который легче поддерживать и согласовывать в рамках вашего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...