Какая производительность лучше в PHP? - PullRequest
5 голосов
/ 02 августа 2009

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

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

Ответы [ 7 ]

5 голосов
/ 02 августа 2009

Сложно сказать. 4000 строк не так уж велики в разборе файлов. С точки зрения управления кодом, это начинает становиться громоздкой, но вы вряд ли увидите значительную разницу в производительности, разбив ее на 2, 5 или 10 файлов, и если на страницах есть только то, что им нужно (это лучшая практика кодирования, но это отдельная проблема). Разница между числом прочитанных строк и числом файлов, которое необходимо открыть анализатору, не кажется достаточно большой, чтобы оправдать что-либо существенное. Моя первоначальная реакция заключается в том, что вам, вероятно, не о чем беспокоиться.

На противоположной стороне медали я работал над проектом на уровне предприятия, где у некоторых операций было дерево include(), которое часто распространялось на сотни файлов. Профилирование этих операций показало, что время, затраченное только на вызовы include(), составляло 2-3 секунды из 10-секундной операции загрузки (это был PHP4).

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

Если вы можете установить расширения на свой сервер, вам следует взглянуть на APC ( см. Также ).
Это, кстати, бесплатно ;-); но вы должны быть администратором вашего сервера, чтобы установить его; так что обычно это не предусмотрено на виртуальном хостинге ...

Это то, что называется «кэш кода операции».

Обычно, когда вызывается PHP-скрипт, происходят две вещи:

  • скрипт "скомпилирован" в коды операций
  • коды операций выполнены

APC хранит коды операций в оперативной памяти; поэтому файл не нужно перекомпилировать каждый раз, когда он вызывается - и это прекрасно как для загрузки процессора, так и для производительности.


Чтобы ответить на вопрос немного больше:

  • 4000 строк не так уж много, если говорить о выступлениях; Откройте пару файлов любого большого приложения / Framework, и вы быстро доберетесь до пары тысяч строк
  • a действительно важно , что нужно учитывать, это ремонтопригодность: с чем вам будет легче работать для вас и вашей команды?
  • загрузка множества небольших файлов может подразумевать много системных вызовов, которые выполняются медленно; но они, вероятно, будут кэшироваться ОС ... Так что, вероятно, не , что релевантно
  • Если вы выполняете хотя бы один запрос к базе данных, этот (включая обход по сети между сервером PHP и сервером БД) , вероятно, займет больше времени, чем разбор нескольких тысяч строк; -)
1 голос
/ 02 августа 2009

В большинстве случаев Disc IO убивает ваш сервер, поэтому я думаю, что чем меньше файлов вы извлечете с диска, тем лучше. Кроме того, если возможно установить APC, файл будет сохранен скомпилированным в память, что является большим выигрышем.

1 голос
/ 02 августа 2009

Если вы загружаете файл размером 4000 строк и используете, возможно, одну функцию, которая составляет 10 строк, то да, я бы сказал, что это неэффективно. Даже если вы использовали множество функций из объединенной 1000 строк, это все равно неэффективно.

Мое предложение было бы объединить связанные функции и сохранить их в отдельных файлах. Таким образом, если страница имеет дело, например, только с функциями базы данных, вы можете загрузить только файл / библиотеку функций базы данных.

Еще одна причина разделения функций - ремонтопригодность. Если вам нужно изменить функцию, вам нужно найти ее в вашем монолитном включаемом файле. Вы также можете иметь функции, которые очень, очень похожи, но даже не понимаете этого. Сортировка функций по их функциям позволяет вам сравнивать их и избавляться от ненужных вещей или объединять две функции в одну более универсальную функцию.

1 голос
/ 02 августа 2009

По моему опыту, наличие большого включаемого файла, который включается везде, может фактически снизить производительность. Я работал над браузерной игрой, в которой у нас были все правила игры, такие как динамически генерируемый PHP (среди прочего), и файл весил около 500 КиБ. Это определенно сказалось на производительности, и вместо этого мы рассмотрели возможность создания расширения PHP.

Однако, как обычно, я бы сказал, что вам следует делать то, что вы делаете сейчас, пока не возникнет проблема с производительностью, а затем оптимизировать при необходимости.

1 голос
/ 02 августа 2009

Думаю, было бы лучше, если бы вы разбили файл функций на компоненты, соответствующие каждой странице; и вызвать эти компоненты на соответствующих страницах. Просто мои 2 цента!

p / s: я - любитель PHP и пытаюсь сделать сайт на PHP; Я не использую никаких функций. Так что вы можете рассказать мне о том, какие функции вам нужны для сайта?

1 голос
/ 02 августа 2009

Как правило, с точки зрения управления файлами лучше разбить материал на более мелкие файлы, потому что вам нужно только загрузить файлы, которые вы фактически используете. Но при 4000 строках это, вероятно, не будет иметь большого значения.

Я бы предложил решение, подобное этому

function inc_lib($name)
{
    include("/path/to/lib".$name.".lib.php");
}

function inc_class($name)
{
    include("/path/to/lib".$name.".class.php");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...