#php #include
#php #включить
Вопрос:
В моем текущем рабочем процессе я включаю файлы функций и классов по мере необходимости. Однако это может стать довольно запутанным, если у вас их довольно много, в которых некоторые зависят от других.
Итак, я рассматриваю возможность использования головного файла, который включает файлы в каталоге includes. Но мой вопрос в том, есть ли какие-либо проблемы с производительностью PHP для выполнения этого при включении, когда мне нужно. Часто мне приходится использовать include_once
, поэтому выполнение 1 большого включения избавило бы от необходимости в этом.
Ответ №1:
Вероятно, лучшим подходом была бы автозагрузка. Тогда вам вообще не нужно (вручную) включать какой-либо класс. Взгляните на это. Я рекомендую использовать spl_autoload_register()
-функцию. Это позволило бы устранить зависимости «на лету». Производительность включений действительно не имеет значения в большинстве случаев. Медленные процессы обычно происходят в других местах. Использование автозагрузки имеет дополнительное преимущество отложенной загрузки. Вы не загружаете исходные файлы, которые не используются. Это может даже ускорить работу вашего приложения.
Комментарии:
1. Автозагрузка, безусловно, лучший подход. Это может показаться сложным, но это не так… Вы также можете использовать автозагрузчик существующего фреймворка, если не хотите создавать свой собственный.
2. в целом, я думаю, вы к чему-то пришли. Тем не менее, я не так сильно предъявляю иски к классам, поэтому в основном это файлы (т. Е.: functions_foobar.php ), который включает в себя набор связанных функций. Можете ли вы порекомендовать способ сделать это?
3. @David: Вы можете сгруппировать их, используя класс со статическими методами. Таким образом, подход автоматической загрузки все равно будет работать. Почему вы не используете классы?
4. В первую очередь потому, что я и другой разработчик не очень хорошо знакомы с ООП, но теперь мы можем пересмотреть, поскольку большая часть нашего кода почти как ООП, но без использования классов.
5. @David: Подход со статическим методом на самом деле не требует знаний ООП. Вы можете думать об этом как о пространствах имен.
Ответ №2:
Обычно на производительность (скорость) в PHP влияет не количество строк кода или файлов, а:
- Доступ к базе данных
- Доступ к файловой системе!!!
- Доступ к сторонним API (SOAP …)
- Стиль кодирования
Ответ №3:
PHP-код интерпретируется на лету. Если данный фрагмент кода не используется, он не будет «скомпилирован» и, следовательно, не приведет к снижению производительности.
Однако весь код на данной странице (и ее включениях) проходит проверку синтаксиса, так что это может немного замедлить работу.
Конечно, я бы рассмотрел имеющиеся у вас включения и то, действительно ли они вам нужны.
Комментарии:
1. Интересно. Я всегда думал, что включение большего количества кода означает больше времени компиляции, я не знал, что компиляция функции и класса откладывается до первого использования. Не могли бы вы дать ссылку на объяснение процесса компиляции PHP, в котором говорится об этом? Я хотел бы узнать об этом больше.
Ответ №4:
Эффект на производительность есть, но он не очень значительный. Делайте все, что ускоряет и упрощает написание кода. Если в конечном итоге вы обнаружите, что вам действительно нужно вернуть этот 1 мс назад, и вы уже обрезали весь остальной fat в другом месте, тогда дерзайте. В противном случае вы тратите время на разработку, пытаясь быть «совершенным», когда на самом деле это никогда не имеет практического значения.
Ответ №5:
Я бы рекомендовал вам взглянуть на автозагрузку: руководство. Я бы также рекомендовал использовать функцию spl_autoload_register
поверх одной __autoload()
, поскольку это обеспечивает больший контроль при разделении модулей или пространств имен.
Ответ №6:
Что ж, включение файлов действительно влияет на производительность вашего приложения, потому что ему необходимо считывать ваше приложение с диска, но если вы остаетесь ниже примерно 100 файлов, это тривиально.
Кстати, если вам не нравится каждый раз включать файлы вашего класса, ознакомьтесь с волшебным методом автозагрузка:
function __autoload($class_name) {
include $class_name . '.php';
}