Почему file_get_contents быстрее чем memcache_get? - PullRequest
8 голосов
/ 04 марта 2012

Я загружаю 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 сек.

Ответы [ 3 ]

8 голосов
/ 04 марта 2012

Поскольку file_get_contents mmap s файл, и поэтому у вас будет только несколько вызовов файловой системы, и это попадет в кэш файловой системы.memcache включает внепроцессные вызовы в memcached (и вне сервера в кластерной реализации).

Производительность file_get_contents() в решающей степени зависит от типа файловой системы, например, файла в NFSсмонтированная файловая система не отображается, и этот доступ может быть намного медленнее.Также на многопользовательском сервере кэш файловой системы может быстро очищаться другими процессами, тогда как кэш memcached почти наверняка будет в памяти.

3 голосов
/ 04 марта 2012

file_get_contents - это самый простой способ получить файл.Базовая операционная система (особенно Linux) уже имеет эффективные механизмы кэширования.Все остальное, что вы делаете, просто создает накладные расходы и замедляет работу.

Memcache будет иметь смысл, если вы загрузите эти файлы из удаленного местоположения.

Редактировать: не обязательно верно, что file_get_contents является самым простымпуть.fopen / fget может быть еще быстрее - я не знаю.Но различия должны быть незначительными по сравнению со сложностью слоя кэширования.

1 голос
/ 04 марта 2012

Хранение XML-файлов в memcache имеет для меня очень мало смысла.

Я бы предпочел хранить проанализированные значения, что избавило меня от чтения и анализа.

...