Что лучше: require_once? или если (! определены ('FOOBAR')) требуют или что-то совсем другое? - PullRequest
3 голосов
/ 03 июня 2009

Предполагается, что версия PHP> = 5.2, что является лучшим решением для управления, включает:

require_once DEFPATH . 'config.inc.php';

или

if (!defined('FOOBAR')) require DEFPATH . 'config.inc.php';

или что-то совсем другое?

Сайт не использует фронтальный контроллер или автозагрузчик. Типичное количество файлов, которое необходимо включить, составляет 3 - 8.

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

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

В общем, какая практика лучше и почему?

Ответы [ 3 ]

3 голосов
/ 03 июня 2009

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

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

Есть несколько вещей, которые вы можете сделать, чтобы ваш запрос работал быстрее:

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

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

Последний совет: остерегайтесь преждевременной оптимизации! Запросы, занимающие от 0 до 50 миллисекунд на сервере, практически не различимы на стороне пользователя.

2 голосов
/ 03 июня 2009

Я бы использовал require_once в вашем случае. Даже если это добавляет накладные расходы, вы можете пренебречь ими, особенно если вам нужно всего лишь включить максимум 8 файлов. Require_once намного менее подвержен ошибкам и более «чист» ...

0 голосов
/ 03 июня 2009

В вашем примере лучше проверить, определен ли FOOBAR. Но это потому, что в вашем примере не указан полный путь к файлу включения.

Вы должны всегда указывать полный путь для чего угодно, если только вы не хотите использовать относительный путь. В противном случае PHP должен искать в вашем каталоге различные пути поиска каталогов. Если это происходит в последнем каталоге пути поиска, это немного накладные расходы.

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

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