Я обычно включаю 1 файл функций в аднер моего сайта, теперь этот сайт довольно высокий трафик, и я просто хочу сделать каждую мелочь лучшим, что могу, поэтому мой вопрос здесь,
Лучше ли включать несколько файлов с меньшим количеством функций с кодом, который необходим для этой страницы, или действительно не имеет значения, просто загрузить все как один большой файл, в моем текущем файле функций есть все функции для всего моего сайта, это около 4000 строк и загружается на каждую страницу загрузки страницы, это плохо?
Трудно сказать. 4 000 строк не так велики в областях анализа файлов. Что касается управления кодами, это начинает становиться на громоздкой стороне, но вы вряд ли увидите большую часть измеримой разницы в производительности, разбив ее на 2, 5 или 10 файлов и имея страницы, содержащие только те немногие, что им нужны (это лучше практика кодирования, но это отдельная проблема). Ваш дифференциал по количеству строк и количеству файлов, которые должен открыть парсер, не кажется достаточно большим, чтобы гарантировать что-либо значимое. Моя первоначальная реакция заключается в том, что это, вероятно, не проблема, о которой вам нужно беспокоиться.
На противоположной стороне монеты я работал над проектом на уровне предприятия, где некоторые операции имели дерево include()
которое часто распространялось на сотни файлов. Профилирование этих операций показало, что время, затраченное на вызовы include()
составляло 2-3 секунды 10-секундной операции загрузки (это был PHP4).
Если вы можете устанавливать расширения на своем сервере, вы должны взглянуть на APC ( см. Также ).
Это бесплатно, кстати ;-); но вы должны быть администратором своего сервера для его установки; поэтому он вообще не предоставляется на общем хостинге …
Это то, что называется «кеш-код операции».
В принципе, когда вызывается PHP-скрипт, происходят две вещи:
APC хранит коды операций в ОЗУ; поэтому файл не нужно перекомпилировать каждый раз, когда он вызывается – и это отличная вещь для загрузки и производительности процессора.
Чтобы ответить на вопрос немного больше:
Я думаю, было бы лучше, если бы вы могли разбить файл функций на компоненты, подходящие для каждой страницы; и вызывать эти компоненты на соответствующих страницах. Просто мои 2 цента!
p / s: Я любитель PHP, и я пытаюсь сделать сайт PHP; Я не использую никаких функций. Так можете ли вы рассказать мне о том, какие функции вам понадобятся для сайта?
По моему опыту наличие большого файла include, который включается везде, может фактически убить производительность. Я работал над браузером, где у нас были все правила игры как динамически созданный PHP (среди прочих), а файл весил около 500 KiB. Это определенно сказалось на производительности, и вместо этого мы решили создать расширение PHP.
Однако, как обычно, я бы сказал, что вы должны делать то, что делаете сейчас, пока это не проблема производительности, а затем оптимизируйте по мере необходимости.
Если вы загружаете файл с 4000 строк и используете, возможно, 1 функцию, которая составляет 10 строк, то да, я бы сказал, что она неэффективна. Даже если вы использовали множество функций из комбинированных 1000 строк, они все еще неэффективны.
Мое предложение состояло в том, чтобы объединить связанные функции и сохранить их в отдельных файлах. Таким образом, если страница работает только с, например, функциями базы данных, вы можете загружать только файлы базы данных или библиотеки.
Причина разрыва функций вверх – ремонтопригодность. Если вам нужно изменить функцию, вам нужно найти ее в своем файле с монолитическим включением. У вас также могут быть функции, которые очень, очень похожи, но даже не осознают этого. Сортировка функций по тому, что они делают, позволяет вам сравнивать их и избавляться от вещей, которые вам не нужны, или объединить две функции в одну общую функцию общего назначения.
В большинстве случаев Disc IO – это то, что убьет ваш сервер, поэтому я думаю, что чем меньше файлов вы извлекаете из диска, тем лучше. Кроме того, если можно установить APC, тогда файл будет сохранен в памяти, что является большой победой.
Как правило, лучше управлять файлами, чтобы разбить материал на более мелкие файлы, потому что вам нужно всего лишь загрузить файлы, которые вы фактически используете. Но, по 4000 строк, это, вероятно, не будет иметь особого значения.
Я бы предложил решение, подобное этому
function inc_lib($name) { include("/path/to/lib".$name.".lib.php"); } function inc_class($name) { include("/path/to/lib".$name.".class.php"); }
вfunction inc_lib($name) { include("/path/to/lib".$name.".lib.php"); } function inc_class($name) { include("/path/to/lib".$name.".class.php"); }
вfunction inc_lib($name) { include("/path/to/lib".$name.".lib.php"); } function inc_class($name) { include("/path/to/lib".$name.".class.php"); }