Включает ли чтение файлы, замедляющие загрузку скрипта php?

Очень часто используются файлы include . Я считаю, что слишком сложно держать коды в порядке, не учитывая производительность. Для нескольких из include s, диск должен читать файлы, и поскольку мы чрезвычайно используем диск, это может быть медленный процесс. Однако это не основной медленный процесс или процесс ограничения скорости, так как загрузка файла с file_get_contents в несколько раз быстрее.

Я думаю, что это причина того, что крупные веб-сайты помещают javascripts в html-файл, а не загружают их по файлу. В качестве альтернативы, может быть хорошей идеей разбить большой JS-файл на несколько небольших JS-файлов, поскольку параллельные HTTP-запросы могут быстрее загружать все JS-коды. Но это отличается от php-файлов, так как чтение php-скриптов include файлы по одному во время процесса.

  1. Прокомментируйте, насколько серьезной может быть эта проблема? Представьте, что веб-страница загружена в 0.60s, может include в include 10 php-файлов, превратив их в 0.70s?

  2. Хотя этот эффект должен быть незначительным, я хочу знать, есть ли подходы к ускорению этого процесса. Я не имею в виду php-кеширование, подобное APC .

PS Этот вопрос не для практического применения (типичный случай), а теоретические соображения в целом.

include его и его необходимость. Он похож на import в Java и python, поскольку он используется для определения классов и функций. include должен быть чрезвычайно быстрым, но использование этого приведет к задержке выполнения сценария по сравнению с тем, если его там не было. include полностью отличается от file_get_contents() . Последнее является функцией, а не конструкцией и возвращает строку. include фактически выполнит код прилагаемого файла.

Ваше утверждение о распаде JS-файлов неверно, так как загрузка скриптов из одного и того же блока параллельных загрузок и, как правило, рекомендуется, чтобы в них было как можно меньше всего.

Я очень сомневаюсь, что наличие нескольких include s, предполагая, что все это необходимо, замедляет работу вашей страницы. Если у вас проблемы с производительностью, посмотрите в другом месте.

Если вы хотите ускорить работу php, изучите использование компилятора php.

Да. Библиотеки, которые вы использовали, приведут к снижению производительности из-за большого количества включений. Лучший способ повысить производительность:

  1. Соедините все включенные файлы в один
  2. Использовать ускоритель

Он может ускорить ваше решение в 22 раза. Подробнее здесь

Учти это:

 (index.php) for ($i=0; $i<100000; $i++) { include('somefile.php'); } (somefile.php) <?php // nothing here в (index.php) for ($i=0; $i<100000; $i++) { include('somefile.php'); } (somefile.php) <?php // nothing here 

index.php занимает ~ 115 секунд (для меня) для обработки 100 000 итераций, включая somefile.php, хотя somefile.php ничего не имеет в нем.

Однако:

 (index.php) for ($i=0; $i<100000; $i++) { // no file included this time } 

index.php теперь занимает 0,002 секунды для завершения без конструкции include ().

 (index.php) for ($i=0; $i<100000; $i++) { echo $i .'<br/>'; } 

index.php занимает 0,02 секунды, чтобы повторить 100 000 итераций $ i.

Конечно, это довольно экстремальный пример из-за большого количества итераций, но он показывает, что, просто включив конструкцию include, время выполнения скриптов может быть отложено довольно экспоненциально. Рассмотрим это в следующий раз, когда вы напишете процесс с большим количеством итераций, т.е. чтение / запись больших XML-файлов и т. д. Лучше всего держать свой код в строгом, даже если это означает, что он менее «управляемый». Потому что вы добавляете не только ~ 115 секунд (~ 2 минуты) к времени выполнения скрипта на каждые 100 000 итераций, просто включив include (), но подумайте, не имеют ли в include () (somefile.php) собственные процессы выполнить. Мой пример просто добавляет конструкцию include (). В прилагаемом файле ничего нет.

Теперь, включая файлы здесь и там для веб-страницы, время было бы незначительным. Я только указывал, что конструкция include () требует дополнительной обработки независимо от ее содержимого.

PHP должен анализировать код независимо от того, находится ли он в основном файле php или включенном. Полагать, что это включить, вероятно, не имеет значения. Скорость диска не имеет никакого значения, поскольку он будет кэшироваться после первого раза.