Форсированный сброс кэша

Форсированный сброс кэша

Если мы устанавливаем время кэширования на несколько лет (фактически на бесконечность), то нам нужно каким-то образом сообщить клиентскому браузеру, что исходный ресурс-то у нас поменялся: иначе браузер его никогда повторно не запросит. Что для этого нужно?

Вообще говоря, для того, чтобы сообщить об обновлении файла в таком случае, нужно изменить его адрес — т. е. заявить обновленный файл под другим URL, что и будет гарантировать его обновление в локальном кэше. Однако это можно сделать двумя способами. Во-первых, мы можем в конце файла обновить GET-строку запроса, например, используя номер версии

http://webo.in/a.css?v23

или дату последнего изменения

http://webo.in/a.css?20081010

Оба этих способа изменяют адрес ресурса (в данном случае, это файл стилей), поэтому браузер обязан его запросить.

Во-вторых, мы можем номер версии добавить в сам файл

http://webo.in/a.v23.css

чтобы исключить возможные проблемы с локальными проксирующими серверами, которые могут не кэшировать у себя файлы с GET-параметрами. В этом случае (дабы не плодить новые физические файлы) нам нужно прописать в конфигурации сервера (например, Apache), чтобы при запросах такого вида отдавался каждый раз один и тот же физический файл. Это можно сделать примерно следующим образом (справедливо для CSS- и JavaScript-файлов):

RewriteRule ^(.*).(v[0-9]+)?.(css|js)$ $1.$2 [QSA,L]

Таким образом, вместо файла a.v23.css будет отдаваться a.css.

Если текущая конфигурация позволяет использовать последний вариант, то стоит остановиться на нем. Иначе сброс кэша придется осуществлять через обновления GET-параметров исходного файла.

«Пробивка» вечного кэширования с помощью подмены директории несколько лучше, чем использование GET-переменной. В качестве основного аргумента можно привести следующее рассуждение: если хоть где-то в цепочке от сервера до браузера есть кэширующий прокси, то по умолчанию он сочтёт запрос с «?» динамическим и отправит запрос на сервер, не пытаясь его искать у себя в локальном кэше. Браузер, разумеется, будет ждать в этом случае несколько больше.

В каком-то смысле это будет экономия «на спичках», так как эффект будет заметен только при посещении сайта другим пользователем той же локальной сети, к примеру. Но тем не менее эффект есть, и процент запросов с заголовком X-Forwarded-For достаточно велик.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

3.1. Expires, Cache-Control и сброс кэша

Из книги автора

3.1. Expires, Cache-Control и сброс кэша Кэширование играет одну из основных ролей в быстродействии сайтов и сравнительно просто настраивается на стороне сервера. Веб-разработчики часто сталкиваются с кэшированием, ибо браузеры и проксирующие серверы, пытаясь ускорить работу


Внутренняя структура буферного кэша

Из книги автора

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


(3.24) Почему у Вас нет совета по оптимизации размера L2 кэша?

Из книги автора

(3.24) Почему у Вас нет совета по оптимизации размера L2 кэша? Довольно давно по сети ходит совет по оптимизации L2 кэша. Для этого советуют по адресу HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager добавить ключ SecondLevel DataCache, и присвоить ему значение равное количеству L2 кэша процессора.


9.3.3. Настройка кэша

Из книги автора

9.3.3. Настройка кэша От того, как вы настроите кэш, будет зависеть удобство работы через прокси- сервер, поэтому я постараюсь показать все директивы, которые относятся к этому разделу, и подробно рассмотреть каждую из них:? cache_dir тип директория размер L1 L2 опции — определяет


9.3.5. Разделение кэша

Из книги автора

9.3.5. Разделение кэша Чтобы ваш сервер мог обмениваться запросами с другими squid-серверами, разделяя таким образом содержимое кэша, вы должны настроить соответствующий протокол.Дня этого есть следующие директивы:? icp_port n — номер порта, который будет использоваться для


Как посетить сайт, чтобы об этом никто не знал (чистка кэша, журнала, Cookies)

Из книги автора

Как посетить сайт, чтобы об этом никто не знал (чистка кэша, журнала, Cookies) Локально следы ваших посещений фиксируются интернет-обозревателем и записываются в журнал. Помимо журнальных записей, историю можно воспроизвести, просмотрев содержание папки Temporary Internet Files и Cookies.


Размер кэша второго уровня

Из книги автора

Размер кэша второго уровня Существует возможность указания размера кэша второго уровня процессора, который установлен в системе. Для этого применяется параметр DWORD-типа SecondLevelDataCache. Если его значение равно 0, то размер кэша будет определяться HAL автоматически (если это


8.2. Получение и сброс блокировки чтения-записи

Из книги автора

8.2. Получение и сброс блокировки чтения-записи Блокировка чтения-записи имеет тип pthread_rwlock_t. Если переменная этого типа является статической, она может быть проинициализирована присваиванием значения константы PTHREAD_RWLOCK_INITIALIZER.Функция pthread_rwlock_rdlock позволяет заблокировать


Шутка №10 — сброс системной даты/времени

Из книги автора

Шутка №10 — сброс системной даты/времени Последняя, десятая шутка будет устанавливать текущую дату 01.01.2000, и изменять текущее время на 00:00:01. Код этой шутки:GetLocalTime(tm); //узнаем текущую дату и времяtm.wYear:= 2000; //устанавливаем годtm.wMonth:= 01; //месяцtm.wDay:= 01; //деньtm.wHour:= 0; //часыtm.wMinute:= 0;


Вычисление размера кэша

Из книги автора

Вычисление размера кэша Когда Firebird читает страницу базы данных с диска, он сохраняет эту страницу в кэше. Обычно размер кэша по умолчанию является достаточным. Если ваше приложение использует соединения из пяти и более таблиц, Firebird Суперсервер может автоматически


Установка размера кэша на уровне базы данных

Из книги автора

Установка размера кэша на уровне базы данных Существует несколько способов конфигурирования размера кэша для конкретной базы данных. Изменения не действуют до тех пор, пока не будет установлено новое соединение с Суперсервером Firebird или не будет соединен новый клиент с


Проверка размера кэша

Из книги автора

Проверка размера кэша Для проверки величины используемого кэша базы данных выполните следующие команды в isql:ISQL> CONNECT имя-базы-данных;ISQL> SET STATS ON;ISQL> COMMIT;Current memory = 415768Delta memory = 2048Max memory = 419840Elapsed time = 0.03 secBuffers = 2048Reads = 0Writes 2Fetches = 2ISQL> QUIT;После SET STATS ON пустая команда COMMIT


Установка размера кэша по умолчанию

Из книги автора

Установка размера кэша по умолчанию Использование gfix является предпочтительным способом установки размера кэша по умолчанию для базы данных. Важно помнить некоторые моменты.* Если вы увеличиваете размер страницы, размер кэша соответственно увеличится. Вы должны


Пример 11-15. "Сброс" переменной

Из книги автора

Пример 11-15. "Сброс" переменной #!/bin/bash# unset.sh: Сброс переменной.variable=hello # Инициализация.echo "variable = $variable"unset variable # Сброс. # Тот же эффект дает variable=echo "(unset) variable = $variable" # $variable = null.exit 0exportКоманда export экспортирует переменную, делая ее


ГЛABA 11  Диспетчер кэша

Из книги автора

ГЛABA 11  Диспетчер кэша Диспетчер кэша (cache manager) — это набор функций режима ядра и системных потоков, во взаимодействии с диспетчером памяти обеспечивающих кэширование данных для всех драйверов файловых систем Windows (как локальных, так и сетевых). B этой главе мы поясним, как