Показать сообщение отдельно

Кэширование Web-страниц
  #35  
Старый 08.06.2009, 05:21
mixkorshun
Познающий
Регистрация: 07.09.2008
Сообщений: 39
С нами: 9302812

Репутация: 20
Post Кэширование Web-страниц

Кэширование Web-страниц

Эта статья ориентирована не на спецов, так что определения некоторых понятий точностью ни изобилуют, главное чтобы было понятно.. Прошу сильно не ругать, так как пишу подобное впервые - за здоровую критику буду благодарен..

Недавно при написании сайта я столкнулся с проблемой кэширования. Долго искал информацию на эту тему, то что нарыл укладывается в один стандартный алгоритм. Примерная его суть:
  1. Получаем URL страницы
  2. Преобразуем в имя файла
  3. Тут варианты: либо все куда то записать(по-типу БД) либо же сохраняем в папку так
  4. Как только обращаются к странице проверяем ее на срок истечения действительности кэша и выводим

Очевидные проблемы:
  1. Скрипт регистрации к примеру выдает специфичные данные для каждого человека(хотя строка может быть и одинаковой), так что кэшировать надо бы выборочно...
  2. Наклевывается вопрос: а если POST или например COOKIE? Тогда URL может быть одинаковым для разных страниц!

Из-за всего этого пришлось изобретать свой велосипед(хотя на новаторство идеи не претендую, вряд-ли кто-то до этого не догадывался):
  1. Используем Базу Данных
    Будем хранить к примеру такую таблицу(для простого случая подходит):
    Цитата:
    ---------------------------
    page | cache_time
    ---------------------------
    По сути кажется что таблица будет весить неимоверно много, но вот тут-то и надо встряхнуть тем серым веществом, которое мы по наивности называем мозгом. Для большинства страниц в базе данных cache_time окажется одинаковым, исключениями будут страницы регистрации, новостные ленты(и то не факт) и.т.п... Зачем хранить там все страницы? В самом скрипте заведем константу, и будем всегда пользоваться ее значением, но перед этим желательно проверять, а нету ли чего-нибудь особенного для этой страницы в базе данных. В итоге 90% страниц будут использовать значение константы, а для 10% можно и пожертвовать драгоценным местом в БД.
  2. Выборочное кэширование
    Первый вопрос: у вас на сайте есть что-то наподобие этого? Если нет - кэшируйте все на здоровье, а если да, то что?

    А ответ прост, нужно всего лишь не кэшировать ту информацию, которая изменятся от пользователя к пользователю. Т.е. вместо всей страницы, мы сохраним в кэш только контент, а генерация остального, очень часто, не столь долгое дело, и заморачиваться со вставкой данных в кэш будет накладней, чем просто генерировать эти элементы страницы каждый раз. Вывод: Иногда удобней кэшировать только часть страницы.
  3. POST и COOKIE
    По сути бесполезность той схемы которую я описал вначале я впервые ощутил столкнувшись с HTTP POST, мое решение не будет изобиловать оригинальностью, но.. По-моему проще всего завести функцию для генерации имени файла в зависимости от уникальных параметров переданных этой функции. Т.е. не будем опираться только на URL, лучше возьмем за основу путь к скрипту и его уникальные параметры.
Вот наверно и все что я хотел написать..
Успехов в ваших разработках! mixk0rshun

P.S.:
Кэширование вряд ли будет иметь много смысла для мелкого сайта, но для крупных разработок оно сильно экономит процессорное время, для маленьких проектов - скорее только затормозит...
И напоследок некоторый совет: проще всего использовать в папке кэша каталоги, т.е:
Страница: http://example.com/forum/index.php?id=3
Кэш: cache/forum/index.php/id=3
 
Ответить с цитированием