2014-11-26 2 views
-1

Мне говорили много лет назад, что использование операторов «include» в PHP не «стоит» в производительности. Но как насчет того, когда вы запрашиваете файловую систему, например, запускаете «filemtime» или «readdir». Если я выполняю их с каждым запросом страницы, это проблема? Благодаря!Есть ли поражение производительности для запроса файловой системы в PHP?

+2

Все имеет удар производительности. Если вам нужно запросить файловую систему, сделайте это. Как еще вы собираетесь получать информацию? – Barmar

+1

Используйте [профайлер] (http://www.xdebug.org/docs/profiler). Это обычно незначительно по сравнению с запросами базы данных. – mario

+0

@Barmar - Мы могли бы жестко кодировать результаты в код, но для этого требуется ручное обновление. Или можно запросить файловую систему один раз и кэшировать данные, но это добавит немного сложнее для приложения. – dylanized

ответ

2

Причина, по которой включают в себя показатели «ничего не стоят» в производительности, заключается в том, что те, которые включают файлы, также часто кэшируются. Semi скомпилированные версии PHP скрипты могут быть сохранены в кэше APC (см: http://php.net/manual/en/book.apc.php)

Помимо этого кэша, операционная система будет также кэш доступа к файлам, поэтому последующие вызовы filemtime не нужно фактического доступа к диску каждый раз. И даже если информация о запросе ОС с жесткого диска, этот диск может также кэшировать самые последние запросы. Таким образом, существует кеширование на нескольких уровнях, чтобы обеспечить максимально быстрый доступ к диску.

Таким образом, по причинам, вызывающим filemtime, много раз тоже не должно быть большой проблемой, но если вам нужно прочитать много разных файлов, кеши могут работать не оптимально, и у вас будет много фактического диска I/O. Eventuall, если у вас много посетителей, файловый ввод-вывод может стать узким местом. Возможно, вы сможете решить эту проблему, обновив свое оборудование. Налет SSD, скорее всего, сможет читать быстрее, чем один вращающийся диск.

Если производительность по-прежнему является проблемой, вы можете хранить файл времени в кеше самостоятельно, например APC или memcache, или даже файл include для PHP, который содержит массив соответствующей информации о файле. Конечно, вам нужно обновлять этот кеш каждый раз, когда вы пишете файл. И не забудьте прокомментировать каждую оптимизацию, которую вы делаете. Если у вас нет APC, файл include, вероятно, не принесет никакой пользы. Кроме того, запросы на memcache имеют некоторые накладные расходы, даже если сами данные находятся в памяти. Таким образом, эти решения не гарантируют улучшения.

Но, как всегда, не начинайте внедрение таких оптимизаций, если вам это не нужно. Преждевременная оптимизация ... :)

+0

Большое спасибо! Моя система фактически запускает Nginx, это что-то меняет? – dylanized

+0

Это не должно иметь большого значения. Я думаю, что Nginx более эффективен с точки зрения памяти, когда дело доходит до использования PHP, но способ, которым PHP обращается к диску, должен быть одинаковым. – GolezTrol

Смежные вопросы