Для начала, оба вызова (require_once и include_once) дважды проверяют, не был ли файл включен ранее.
Таким образом, они оба достигают этого путем поиска файла по всем доступным путям и, по сути, проверки того, не был ли он в миксе раньше и т. Д.
В фоновом режиме происходит то, что они оценивают все различные параметры (например, несколько include_path и т. Д.), А затем, создавая realpath из этой сокращенной формы, они создают уникальный идентификатор. Есть только один и тот же путь, а не два.
Это уже не самый быстрый процесс на планете и обычно происходит при каждом запросе PHP. Затем добавьте еще одну дорогостоящую операцию, которая является статом при создании того, что я назвал realpath (realpath, потому что это что-то вроде того, что realpath () делает), чтобы проверить, существует ли файл.
Поправьте меня, если я ошибаюсь, но в APC есть оптимизация специально для этого случая.
Так или иначе - теперь о разнице между require_once и include_once, которая заключается в том, что require_once оценивает файл (на предмет низкоуровневых ошибок синтаксического анализа и т. Д.), Когда он включает его. Это дополнительная проверка, от которой вы можете избавиться, если у вас достаточно QA, чтобы ошибка синтаксического анализа никогда не могла проникнуть во включение.
Иначе найти сложно. :-)
(Что следует учитывать: вы можете разработать с помощью require_once и заменить все вызовы на include_once при развертывании.)
Что касается кеша кода операции - я бы порекомендовал APC. Ранее это обсуждалось в stackoverflow. Лично я / мы используем его какое-то время (мы обрабатываем примерно 100 тыс. Посетителей в день с 3 интерфейсами и 1 сервером), и мы очень довольны. APC также оптимизирован для безумия require_once / include_once.
Довольно крутой побочный эффект заключается в том, что APC также позволяет хранить переменные PHP в памяти - своего рода постоянные и т. Д.
Пара дополнительных указателей:
- Многие утверждают, что можно ускорить любое приложение с помощью __autoload.
- С кешем кода операции избегайте условного require_once / include_once (например, в циклах или в потоке управления).
- Некоторые люди говорят, что /absolute/path/to/file.php в include_ или require_once быстрее, чем полагаться на include_path.
- Порядок путей в вашем include_path также имеет значение.
Надеюсь, это поможет.
person
Till
schedule
17.10.2008