Темы

Блоги

Агрессивное кеширование файлов. Пятница 07 Август 2009 18:49:51

В этой заметке пойдое речь о кешировании различного рода файлов средствами апачи.
Большинство начинающих веб разработчиков избегает пользоваться HTTP кешированием. В этой заметке я хоче поделиться опытом.
Чтобы закешировать рисунки в файл .htaccess следующие строки:

<IfModule mod_expires.c>
# turn on the module for this directory
ExpiresActive on

# cache common graphics for 10 years
ExpiresByType image/jpg "access plus 10 years"
ExpiresByType image/gif "access plus 10 years"
ExpiresByType image/jpeg "access plus 10 years"
ExpiresByType image/png "access plus 10 years"

# cache CSS for 24 hours
ExpiresByType text/css "access plus 10 years"

# set the default to 24 hours
ExpiresDefault "access plus 2 hours"
</IfModule>



Что делает приведенная настройка, в случае если апач установлен c модулем mod_expires, то на все основные гравические файлы и файлы стилей устанавливается кеширование на 10 лет.

Тут-то все и пугаются. А что будет, если какие-либо файлы изменяться? Браузер просто не будет скачикать? Давайте посмотрим, что можно сделать в этом случае.

Естественный ответ - поменять путь до файла, например добавить какой либо GET параметр. Тут вариантов много.

Например, формировать адрес файла следующим образом:

md5 = md5-хеш отфайла.

И тогда адрес до файла отдавать в виде: file_url?version=md5
Если файл изменился, то соответственно изменится и его хеш. Естественно, что вычислять данное значение нежно только 1 раз при изменении файла.
В случае же рисунков, которые загружают пользователи такой метод не очень хорош... Даже совсем не хорош:) Как же быть? Если вайлы, загружают пользователи, то как правило о каждом файле делается запись в базе данных. А что нам мешает туда же записывать время последнего изменения файлов? Вот и будем при каждом обновлении рисунка обновлять время в базе данных. Дальне все просто - отдаем адрес файла в виде: file_url?version=update_time

Таким образом, мы создали некоторую "защиту" от протухшего кеша. Таким образом пользователь всегда может увидеть изменившуюся картинку, даже если она закеширована на 10 лет.

Теги:

Комментарии

  • Хм... Нет комментариев... Но вы пожете исправить это!

Написать комментарий

Прежде чем высказать свое мнение, прочитайте пожалуйста правила!
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно