
08.06.2009, 05:21
|
|
Познающий
Регистрация: 07.09.2008
Сообщений: 39
С нами:
9302812
Репутация:
20
|
|
Кэширование Web-страниц
Кэширование Web-страниц
Эта статья ориентирована не на спецов, так что определения некоторых понятий точностью ни изобилуют, главное чтобы было понятно.. Прошу сильно не ругать, так как пишу подобное впервые - за здоровую критику буду благодарен..
Недавно при написании сайта я столкнулся с проблемой кэширования. Долго искал информацию на эту тему, то что нарыл укладывается в один стандартный алгоритм. Примерная его суть: - Получаем URL страницы
- Преобразуем в имя файла
- Тут варианты: либо все куда то записать(по-типу БД) либо же сохраняем в папку так
- Как только обращаются к странице проверяем ее на срок истечения действительности кэша и выводим
Очевидные проблемы:- Скрипт регистрации к примеру выдает специфичные данные для каждого человека(хотя строка может быть и одинаковой), так что кэшировать надо бы выборочно...
- Наклевывается вопрос: а если POST или например COOKIE? Тогда URL может быть одинаковым для разных страниц!
Из-за всего этого пришлось изобретать свой велосипед(хотя на новаторство идеи не претендую, вряд-ли кто-то до этого не догадывался): - Используем Базу Данных
Будем хранить к примеру такую таблицу(для простого случая подходит):
---------------------------
page | cache_time
---------------------------
По сути кажется что таблица будет весить неимоверно много, но вот тут-то и надо встряхнуть тем серым веществом, которое мы по наивности называем мозгом. Для большинства страниц в базе данных cache_time окажется одинаковым, исключениями будут страницы регистрации, новостные ленты(и то не факт) и.т.п... Зачем хранить там все страницы? В самом скрипте заведем константу, и будем всегда пользоваться ее значением, но перед этим желательно проверять, а нету ли чего-нибудь особенного для этой страницы в базе данных. В итоге 90% страниц будут использовать значение константы, а для 10% можно и пожертвовать драгоценным местом в БД.
- Выборочное кэширование
Первый вопрос: у вас на сайте есть что-то наподобие этого? Если нет - кэшируйте все на здоровье, а если да, то что?

А ответ прост, нужно всего лишь не кэшировать ту информацию, которая изменятся от пользователя к пользователю. Т.е. вместо всей страницы, мы сохраним в кэш только контент, а генерация остального, очень часто, не столь долгое дело, и заморачиваться со вставкой данных в кэш будет накладней, чем просто генерировать эти элементы страницы каждый раз. Вывод: Иногда удобней кэшировать только часть страницы.
- POST и COOKIE
По сути бесполезность той схемы которую я описал вначале я впервые ощутил столкнувшись с HTTP POST, мое решение не будет изобиловать оригинальностью, но.. По-моему проще всего завести функцию для генерации имени файла в зависимости от уникальных параметров переданных этой функции. Т.е. не будем опираться только на URL, лучше возьмем за основу путь к скрипту и его уникальные параметры.
Вот наверно и все что я хотел написать..
Успехов в ваших разработках! mixk0rshun
P.S.:
Кэширование вряд ли будет иметь много смысла для мелкого сайта, но для крупных разработок оно сильно экономит процессорное время, для маленьких проектов - скорее только затормозит...
И напоследок некоторый совет: проще всего использовать в папке кэша каталоги, т.е:
Страница: http://example.com/forum/index.php?id=3
Кэш: cache/forum/index.php/id=3
|
|
|