Очень часто используются файлы include
. Я считаю, что слишком сложно держать коды в порядке, не учитывая производительность. Для нескольких из include
s, диск должен читать файлы, и поскольку мы чрезвычайно используем диск, это может быть медленный процесс. Однако это не основной медленный процесс или процесс ограничения скорости, так как загрузка файла с file_get_contents
в несколько раз быстрее.
Я думаю, что это причина того, что крупные веб-сайты помещают javascripts в html-файл, а не загружают их по файлу. В качестве альтернативы, может быть хорошей идеей разбить большой JS-файл на несколько небольших JS-файлов, поскольку параллельные HTTP-запросы могут быстрее загружать все JS-коды. Но это отличается от php-файлов, так как чтение php-скриптов include
файлы по одному во время процесса.
Прокомментируйте, насколько серьезной может быть эта проблема? Представьте, что веб-страница загружена в 0.60s, может include
в include
10 php-файлов, превратив их в 0.70s?
Хотя этот эффект должен быть незначительным, я хочу знать, есть ли подходы к ускорению этого процесса. Я не имею в виду php-кеширование, подобное APC
.
PS Этот вопрос не для практического применения (типичный случай), а теоретические соображения в целом.
include
его и его необходимость. Он похож на import
в Java и python, поскольку он используется для определения классов и функций. include
должен быть чрезвычайно быстрым, но использование этого приведет к задержке выполнения сценария по сравнению с тем, если его там не было. include
полностью отличается от file_get_contents()
. Последнее является функцией, а не конструкцией и возвращает строку. include
фактически выполнит код прилагаемого файла.
Ваше утверждение о распаде JS-файлов неверно, так как загрузка скриптов из одного и того же блока параллельных загрузок и, как правило, рекомендуется, чтобы в них было как можно меньше всего.
Я очень сомневаюсь, что наличие нескольких include
s, предполагая, что все это необходимо, замедляет работу вашей страницы. Если у вас проблемы с производительностью, посмотрите в другом месте.
Если вы хотите ускорить работу php, изучите использование компилятора php.
Да. Библиотеки, которые вы использовали, приведут к снижению производительности из-за большого количества включений. Лучший способ повысить производительность:
Он может ускорить ваше решение в 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 или включенном. Полагать, что это включить, вероятно, не имеет значения. Скорость диска не имеет никакого значения, поскольку он будет кэшироваться после первого раза.