Оригинал статьи
http://osoyan.ru/blog54Что ж начинаю помогать заполнять сайт статьями. Все равно пишу статьи для своего сайта. Но некоторые буду и сюда портировать.
(Пиар)Довольно часто в сайто-строении используется кэш. Да вообще во всех браузерах присутствует кэширование данных для быстрого доступа, в целях экономии трафика. Это конечно очень удобно, но не всегда. Ведь например мы хотим быть точно уверенными, что пользователь получить новую картинку, видео или иной медиа файл, а не сохранившийся в кэше предыдущий. Конечно же в браузере можно легко отключить кэширование. Но не всем пользователям это нужно. Но есть способы для исключения кеша для определенных элементов. И так для начала узнаем что такое кэш.
Кэш — промежуточный буфер с быстрым доступом, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше идёт быстрее, чем выборка исходных данных из оперативной (ОЗУ) и быстрее внешней (жёсткий диск или твердотельный накопитель) памяти, за счёт чего уменьшается среднее время доступа и увеличивается общая производительность компьютерной системы. Прямой доступ к данным, хранящимся в кэше, программным путем невозможен.
Проще говоря, это данные сохраненные для быстрого доступа. Допустим есть картинка размером 500кб. Что бы она каждый раз не грузилась с сервера, браузер сохраняет эту картинку на компьютере и затем при повторном обращении, не скачивает ее с сервера, а берет ее с жесткого диска пользователя. Давайте рассмотрим варианты анти-кэша. Это довольно просто.
<img src="http://site.ru/img.jpg?111">
Здесь после jpg идет знак вопроса, все что после него это параметры. Параметры обычно используются для скриптов. И имеют структуру в виде
ключ=значение, но картинка не скрипт, и поэтому после знака вопроса, может иметь любое значение. Если это значение менять то каждый раз картинка будет загружаться с сервера по новой. Достаточно добавить рандом.
echo '<img src="http://site.ru/img.jpg?" . mt_rand(0, 10000)>';
Теперь наша картинка будет каждый раз грузиться по новой. Но это не умный анти-кэш. Он будет просто каждый раз загружать элемент по новой, попросту тратя трафик. Давайте напишем более умный анти-кэш.
echo '<img src="http://site.ru/img.jpg?" . date("H")>';
В принципе вот, мы просто каждый час будем загружать картинку по новой, можно создать любой интервал. Обычно это пойдет для картинок. А если у нас большой файл. Например Flash приложение. И нам нужно загружать новую версию только если она действительно изменилась. Это можно сделать следующим способом.
$hash = md5_file("file.swf");
echo "Вообщем тут вставляем обьект с сылкой file.swf?$hash";
Мы вычисляем md5 хэш, не путайте с кэшом. Хэш будет разным только если содержимое файла изменялось. То есть мы просто вставляем в параметр загрузки хэш. И файл у нас загружается новый только тогда когда мы его действительно изменили. Вот и все, ничего сложного. Удачного вам кодинга.