Wicked
Новичок
Кэширование намертво
Народ, меня заинтересовал такой момент...
Хочется сделать, чтобы статические js, css, картинки, и прочая статика кэшировались браузером намертво (чтобы даже не было http-запроса с проверкой, который обычно заканчивается 304 NOT MODIFIED, ибо это так и так round trip'ы), а инвалидация такого кэша производилась бы исключительно сменой урла. Урлы в данном случае могли бы быть как на небезызвестном сайте вконтакте: а-ля https://vkontakte.ru/js/activity.js?10 или https://vkontakte.ru/js/effects.js?6. Как требование к реализации можно обозначить отсутствие человеческого фактора. В то же время желательна минимизация затрат на вычисление, т.е., скорее всего, понадобится кэширование.
Т.к. сам деплоймент происходит используя apache ant, то вмешательство человека для очистки кэша не нужно.
Пока что мне это видится так:
в качестве версий файлов вполне можно использовать filemtime (кроме закачиваемых юзерами файлов, разве что). Чтобы не вычислять его при каждом запросе скрипта, эти данные кэшируются в shared memory или в один php-file вида:
который затем инклюдится, и используется для формирования ссылок:
С картинками, которые у нас закачивают юзеры как то мне все видится прозрачней за счет добавления версионности к записям в бд: например, поменял пользователь свой аватар => версия аватара в базе изменилась => в html выводится урл до аватары не /avatars/78347.jpg?9, а /avatars/78347.jpg?10.
Собственно, интересуют альтернативные решения: побольше и разных.
Народ, меня заинтересовал такой момент...
Хочется сделать, чтобы статические js, css, картинки, и прочая статика кэшировались браузером намертво (чтобы даже не было http-запроса с проверкой, который обычно заканчивается 304 NOT MODIFIED, ибо это так и так round trip'ы), а инвалидация такого кэша производилась бы исключительно сменой урла. Урлы в данном случае могли бы быть как на небезызвестном сайте вконтакте: а-ля https://vkontakte.ru/js/activity.js?10 или https://vkontakte.ru/js/effects.js?6. Как требование к реализации можно обозначить отсутствие человеческого фактора. В то же время желательна минимизация затрат на вычисление, т.е., скорее всего, понадобится кэширование.
Т.к. сам деплоймент происходит используя apache ant, то вмешательство человека для очистки кэша не нужно.
Пока что мне это видится так:
в качестве версий файлов вполне можно использовать filemtime (кроме закачиваемых юзерами файлов, разве что). Чтобы не вычислять его при каждом запросе скрипта, эти данные кэшируются в shared memory или в один php-file вида:
PHP:
<?php
mycache::add(array(
"css/1.css" => 8943857984,
"css/2.css" => 3849898495,
"js/1.js" => 8734659344,
"js/2.js" => 9894898594,
"images/logo.jpg" => 9834984795,
etc...
));
?>
PHP:
print "<a href=\"css/1.css?".mycache::get("css/1.css")."\">";
Собственно, интересуют альтернативные решения: побольше и разных.