Проекты |
Развенчиваем мифы Include и RequireInclude, 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 и т.п. вернутся к списку |