Я загружаю файлы XML с диска с помощью file_get_contents, и, как тест, я нахожу, что могу загрузить файл 156K с помощью file_get_contents()
1000 раз за 3,99 секунды. Я подклассифицировал часть, которая загружает и заменяет ее слоем memcache, а на моем компьютере-разработчике я могу сделать 1000 загрузок одного и того же документа за 4.54 секунды.
Я понимаю, что file_get_contents () будет выполнять некоторое кэширование, но похоже, что это на самом деле быстрее, чем известный метод кэширования. На одном сервере есть производительность file_get_contents()
как можно лучше?
Я на PHP 5.2.17 через Macports, OS X 10.6.8.
Изменить: я нашел в документах XML такого размера, есть небольшое преимущество в использовании флага MEMCACHE_COMPRESSED
. 1500 загрузок через memcache выполняются через 6.44 с (с сжатием), а не 6.74 (без). Однако они медленнее, чем file_get_contents
, что делает такое же количество нагрузок в 5.71 сек.
Потому что file_get_contents mmap
s файл, и поэтому у вас будет только несколько системных вызовов, и это закончится в кеше файловой системы. memcache включает вызовы вне процесса для memcached (и вне сервера в кластерной реализации).
Производительность file_get_contents()
решающей степени зависит от типа файловой системы, например, файл в файловой системе NFS не помечен, и этот доступ может быть медленнее. Также на многопользовательском сервере кэш файловой системы может быстро сбрасываться другими процессами, тогда как кеш memcached почти наверняка будет в памяти.
file_get_contents – это самый простой способ получить файл. Основная операционная система (особенно Linux) уже имеет эффективные механизмы кэширования. Все, что вы делаете, просто создает накладные расходы и замедляет работу.
Memcache имеет смысл, если вы загрузите эти файлы из удаленного места.
Изменить: Не обязательно верно, что file_get_contents – самый простой способ. fopen / fget может быть еще быстрее – я не знаю. Но различия должны быть незначительными по сравнению со сложностью слоя кеширования.
Хранение XML-файлов в memcache имеет для меня очень мало смысла.
Я бы предпочел хранить анализируемые значения, сохраняя и чтение, и синтаксический анализ.