PHP DevelStudio - Развенчиваем мифы Include и Require
 

Создание программ

Полноценная среда программирования php , которая позволяет создавать exe программы на языке PHP с поддержкой GUI или без программирования, с помощью различных мастеров.
 

DevelStudio v3.0 beta конструктор программ

 

Проекты

Развенчиваем мифы Include и Require

Include, Require - эти команды подключают скрипты из файлов. Зачем разработчики PHP ввели 2 инструкции для этих целей? Забавно наблюдать, как разработчики часто спорят о быстроте выполнения этих команд. Но на самом деле все намного проще...

Миф 1: Require быстрее Include


Довольно распространенный миф. Честно говоря и я когда-то так думал, до того самого момента пока не провел тесты и не почитал документацию PHP 5. Возможно в PHP 4 и было так. Тесты показали, что Include абсолютно не уступает по быстроте подключения файлов. Известно, что Include может возвращать результат как функция и не выдает фатальной ошибки при отсутствии файла, и еще некоторые отличия с видимостью переменных. На этом различия заканчиваются.

    Примечание:

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

Миф 2: Require подключает файл до выполнения


Тоже довольно интересный миф. Я не представляю, как это технически возможно, когда путь к файлу часто определяется во время выполнения и нет возможности его определить до выполнения. Многие require представляют как #include в си, но это совершенно не так! Инструкции для вставки файлов до выполнения в PHP нет!

    Примечание:

Часто про это пишут в учебниках про PHP, наверно авторы не читают документацию и не делают тестов, если пишут такой бред.

Миф 3: Require_once и Include_once очень медленные


Тоже миф, но есть немного здесь лукавства. Конечно они немного медленней Include и Require, но увидеть разницу в скорости очень сложно. Напомню, _once команды подключают файл в том случае, если он только уже не был подключен. Возможно это команда и замедляется со временем, когда подключенных файлов становиться более 1000, но это в том случае если в движке реализован примитивный поиск в таблице подключенных файлов. В общих случаях, часто внутри файлов находится скрипт более "тяжелый" по времени выполнения чем команды include и require.

    Примечание:

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

Напоследок: О скорости выполнения Include и Require


После обычных тестов на подключение файлов через эти команды оказалось, что они довольно медленные. Я бы даже сказал, очень медленные. Если вы подключаете 100 файлов, это еще не заметно, если вы подключаете 1000 файлов, то замедление будет довольно заметно, где-то в 0.5 секунд. А если вы подключите 10000 таких файлов, на это уйдет от 5-10 секунд. Интересно другое, что такое замедление в движке PHP дает не компиляция скрипта в байт-код (хотя это тоже имеет место быть), а что-то явно другое. Тесты проводились практически на пустых файлах, генерировать там нечего даже, поэтому такие вот печальные выводы.

    Примечание:

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


вернутся к списку