Производительность PHP при включении нескольких файлов

#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';
}
  

http://php.net/manual/en/language.oop5.autoload.php