Насколько большое влияние оказывают файлы PHP на производительность? - PullRequest
4 голосов
/ 15 июня 2011

Вопрос в значительной степени говорит обо всем, я работаю над большим проектом, где большинство звонков на php include() между 100 и 150 файлами. В среднем время php составляет от 150 до 300 мс. Мне интересно, сколько это связано с включением сценариев PHP? Я думал о запуске сценария, который проверяет наиболее часто используемые файлы на предмет определенных вызовов и объединяет их в один файл, чтобы ускорить процесс, но, насколько я знаю, это никак не сказывается.

Я должен отметить, что я использую APC, я не полностью осведомлен о том, что APC делает в фоновом режиме, но я мог бы предположить, что он уже может как-то кэшировать мои файлы, так что количество файлов на самом деле не имеет большого значения?

Буду признателен за любую информацию по этому вопросу.

Конечно, 300 мс - это не так много, но если я могу сказать, что 100 мс или даже 50 мс, это значительное повышение.

Edit:

Чтобы уточнить, я говорю о загрузке файлов с помощью php include / require.

Ответы [ 2 ]

9 голосов
/ 15 июня 2011

Загрузка файлов - сложная вещь.Как уже говорили другие, единственный верный способ определить это - это сделать несколько тестов.Тем не менее, вот некоторые общие правила , которые применяются только к загрузке PHP, а не к файлам с fopen :

  • APC будет хранить свой кэш кода операции в общей памяти, так что вы получите удар попервая загрузка, но не последующие загрузки.
  • include и include_once (и их require двоюродные братья) на самом деле довольно тяжелые.Вот несколько советов по улучшению их скорости:
    • Используйте абсолютные пути к вашим файлам (избегайте относительных путей, таких как ../foo.php)
    • Обе функции _once необходимо проверить, чтобы убедиться, чтофайл не был также включен через символическую ссылку, поскольку символическая ссылка может создавать несколько путей к одному и тому же файлу.Это очень дорого.(см. следующий пункт)
  • Гораздо дешевле загружать только те файлы, которые вам нужны, чем звонить include.Используйте автозагрузчики, чтобы загружать классы только тогда, когда они необходимы.
  • Локальные диски почти всегда лучше, чем сетевое хранилище.По возможности, если у вас несколько серверов, сохраняйте копии исходного кода на каждом сервере.Это означает, что вам нужно обновить несколько мест во время выпуска, но это стоит усилий в производительности.

В целом это зависит от скорости вашего жесткого диска.Но по сравнению с полной загрузкой файла или загрузкой его из ОЗУ загрузка файла невероятно медленная.

Надеюсь, это помогло.

4 голосов
/ 15 июня 2011

Это довольно много файлов, но не удивительно, если вы используете фреймворк (Zend случайно?).Влияние включения такого количества файлов в основном зависит от скорости жесткого диска вашего сервера.В любом случае, доступ к файлам очень медленный, поэтому, если вы можете, уменьшите количество включений.

APC делает / может кэшировать коды операций для всех этих файлов в памяти, что означает, что больше не будет искать диск до тех пор, пока кэш не станет недействительным /уничтожен.

  • Попробуйте выключить APC и посмотрите, насколько это существенно.Должен быть заметный всплеск времени выполнения.

  • Попробуйте профилировать скрипт с помощью xdebug.Скорее всего, вы обнаружите, что существуют другие проблемы (проблемы с кодом), которые влияют на производительность больше, чем доступ к файлу.

...