Информация

Обсуждало 2 человека

Умный анти-кэш

Серверные технологии и Flash
28 декабря 2011 в 00:44:59

Оригинал статьи 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 хэш, не путайте с кэшом. Хэш будет разным только если содержимое файла изменялось. То есть мы просто вставляем в параметр загрузки хэш. И файл у нас загружается новый только тогда когда мы его действительно изменили. Вот и все, ничего сложного. Удачного вам кодинга.

Обсуждение (вниз)

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

28 декабря 2011 в 11:27:49

В интернете может есть примеры коллизии хэшей. То ж интересно посмотреть. А вообще если не хочешь уменьшить вероятность коллизии то напиши md6 где хэш будет длинной 64 знака хД

28 декабря 2011 в 10:52:23

Кстати говоря, несмотря на тонны хэшей, которые мне встречаются каждый день, так ни разу и не столкнулся ни с одной коллизией, а ведь очень хочется)

28 декабря 2011 в 01:09:06

это описание КЭШа процессора ведь XD


Фак, ночью соображаю плохо хД Ну это основное понятие, я же написал ниже для простых смертных

Проще говоря, это данные сохраненные для быстрого доступа.
хД

А как же коллизии md5-хэшей? :D


Они редкие, к тому же если уж тебя прямо так волнует эта коллизия, добавь к хэшу, текущий день хД

28 декабря 2011 в 00:55:42

Кэш — промежуточный буфер с быстрым доступом, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше идёт быстрее, чем выборка исходных данных из оперативной (ОЗУ) и быстрее внешней (жёсткий диск или твердотельный накопитель) памяти, за счёт чего уменьшается среднее время доступа и увеличивается общая производительность компьютерной системы. Прямой доступ к данным, хранящимся в кэше, программным путем невозможен.


это описание КЭШа процессора ведь XD

28 декабря 2011 в 00:55:20

А как же коллизии md5-хэшей? :D
Fundux.ru v.3.0 © 2006-2021 AleXNoD
Портал русских флеш игр и flash мультов