загрузка кэшированного файла занимает больше времени, чем не кэширование - и чтение файла кэша не проблема, его вывод - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть сайт с несколькими запросами в БД и большим количеством посетителей, поэтому я подумал, что id кэширует его.

это в php, поэтому я использую ob_start () и т. Д., Чтобы получить содержимое и сохранить файл. это быстро.

это занимает 0,05 сек. (мне даже не нужно кешировать).

проблема с загрузкой файла.

если я сделаю это:

 readfile($cache_file)

это занимает 0,43 секунды.

если я сделаю

$c= fread(fopen($cache_file,'r',filesize($cache_file)) 

(т.е. читать файл, не выводить его), это быстрее, чем 0,05.

если я тогда сделаю

echo $c

это займет 0,4 секунды снова.

есть идеи, как это ускорить? кажется, что в основном отображение (или как бы это ни делал readfile) полного кэша за один раз занимает больше времени, чем просто создание страницы на лету.

ps размер файла кэша составляет около 41 килобайта. Я полностью протестировал, чтобы убедиться, что проблема заключается в загрузке большого файла. создание файла чтения ($ smallfile); это быстро. Это медленно только при выводе файла кэша, когда файл кэша большой

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

1 Ответ

1 голос
/ 18 сентября 2010

Почему бы вам просто не подать кешированную страницу напрямую, а не передавать ее через PHP? Сохраните кэшированный файл как [request_name] _cache.html, а затем используйте mod_rewrite для непосредственного обслуживания кэшированного HTML, если он существует:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}_cache.html -f
RewriteRule ^(.*)$ $1_cache.html

Если вы уже используете mod_rewrite напрямую, вам может потребоваться настроить это.

Также, если вы измените данные в БД, не забудьте удалить кэшированную страницу.

...