Включая файл в PHP? - PullRequest
       13

Включая файл в PHP?

1 голос
/ 21 мая 2009

Я разрабатываю приложение, в котором у меня есть требование, чтобы я включил несколько файлов, следующим образом:

File1.php will include File2.php

File2.php will include File3.php

File3.php will include File4.php

Теперь, что будет лучшим и оптимизированным способом сделать это. Я попытался с помощью include (), но я думаю, что это замедляет мой сервер, так как графики загрузки сервера примерно в 3-5 раз превышают нормальную загрузку сервера.

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

Что будет лучше?

require()

require_once()

include()

include_once()

ИЛИ если у кого-то есть другой вариант, скажите, пожалуйста,

Спасибо

Ответы [ 8 ]

3 голосов
/ 21 мая 2009

Разница между include () и require () заключается в том, получаете ли вы предупреждение или фатальную ошибку (соответственно). Документы PHP не упоминают никакой разницы в производительности.

Использование вариантов _once () полезно, если вы хотите избежать дублирования содержимого включаемых файлов. Из PHP документов для include_once:

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

2 голосов
/ 10 декабря 2010

В статье о технологиях, которые ваша вселенная рассказывает о проблеме require von require_once . По сути, при выполнении абсолютных путей require() определенно быстрее, чем require_once(), а include() определенно быстрее, чем include_once(). Их точное требование, когда они заменили одноразовые вызовы безусловными:

Во-первых, Strace показал, что были 2848 системных вызовов, чтобы обслуживать страницу, вниз от 4782 (-40%). Далее я пошел в б для дополнительного тестирования, и обнаружил, что среднее время запроса страницы уменьшилось до 36,5 с 46,5 мс (-22%), и сервер смог обслужить 27,1 запроса в секунду с 21,4 (+% 22).

Согласно комментарию Константина Розинова 90017 на странице require_once на php.net , разница между require() и require_once() крошечная и имеет значение только для больших веб-приложений. Я лично хотел бы определение большого, но я думаю, что мы поняли идею. Комментатор также утверждает, что «при использовании кэширования кода операции APC разница в скорости между ними совершенно не имеет значения». Относительно фактической реализации require и require_once: «Это указывает на то, что либо ОС (Ubuntu Linux в моем случае), либо Apache« кэширует »или знает результаты предыдущих вызовов stat (), поэтому он не беспокоит их повторение «. Возьми это за то, что оно того стоит.

Мое личное суммирование:

  • Если вы собираетесь использовать require_once, попробуйте использовать абсолютные пути.
  • Обязательно используйте какое-либо кэширование кода операции.
2 голосов
/ 21 мая 2009

Jusn записка, чтобы знать. В одном из моих проектов мне пришлось создать своего рода фабрику для большого количества классов (около 50). Я создал файл для каждого класса, и включение их было очень медленным. Я решил объединить их в один файл. Эта повышенная производительность очень заметна.

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

2 голосов
/ 21 мая 2009

Вы должны реорганизовать свои файлы. Есть файл "common.php", который включает в себя все необходимые файлы. У тебя не должно быть такой цепи.

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

Кроме того, разница в скорости между упомянутыми вами функциями незначительна, хотя вы должны использовать include_once / require_once вместо их аналогов, чтобы не включать один и тот же файл несколько раз.

0 голосов
/ 21 мая 2009

Я бы предложил использовать расширение xdebug PHP для тестирования и профилирования вашего скрипта. Он скажет вам, сколько времени потребовалось для выполнения каждой функции. Вы можете найти больше информации о том, как установить его и что он может сделать здесь: http://www.xdebug.org/

0 голосов
/ 21 мая 2009

Определенно выберите include() или require() над вариантами '*_once()'. Вам, вероятно, нужен какой-то кэш кода операции , чтобы повысить производительность.

0 голосов
/ 21 мая 2009

Я предпочитаю разбивать все на столько файлов, сколько мне удобно для разработки, но затем объединить все в один файл перед загрузкой на сервер.

Функции PHP для работы со строками и регулярными выражениями упрощают написание скрипта, который заменит любой файл include 'somefile.php'; с фактическим содержимым этого файла (при необходимости <??>).

0 голосов
/ 21 мая 2009

Ваш ответ будет в основном зависеть от ваших потребностей. Имейте в виду:

  1. включить быстрее, чем требуется.
  2. если файл «включен», но не найден, это не приводит к фатальной ошибке. Скрипт продолжит работу.
  3. если файл «требуется», но не найден, выполнение сценария немедленно останавливается.

Тем не менее, примечание: если ваше приложение включает файл file4 в file3, file3 в file2 и file2 в file1, то я бы сказал, что вам следует пересмотреть файловую организацию. Я уверен, что вы можете придумать лучший способ организации вашего кода в файлы.

ДОПОЛНЕНИЕ: Разница в скорости между include и require довольно незначительна. Однако require_once () значительно тяжелее, чем require (). Аналогично для include_once () и include ().

ура

JRH

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