Кеширование в JS / CSS - PullRequest
       7

Кеширование в JS / CSS

0 голосов
/ 14 июля 2010

Чтобы уменьшить количество запросов http, а также упростить процесс развертывания файлов js / css, я настроил приложение php для объединения файлов js и css.Все включенные файлы последовательно объединяются в один большой файл с использованием двухбуквенных кодов для каждого файла (например, home.js code = "AA").Чтобы сгенерировать имена, я объединяю все коды в порядке их загрузки, добавляю подчеркивание, затем метку времени (например, «AABACE_12345678.js»).Затем в каталоге они обслуживаются, и я использую директиву apache в htaccess для анализа файлов с помощью php (sing sethandler), чтобы я мог контролировать заголовки и возвращать 301 заголовки в неизмененном виде.

К сожалениюэто не работает ... Я проверил это дерьмо с помощью сетевой панели Firebug и liveHTTPHeaders.Страница загружает файл каждый раз, даже если он должен быть в кеше.Вот пример заголовков ответов, которые возвращает один из файлов:

Date                Wed, 14 Jul 2010 17:00:28 GMT
Cache-Control       private
Content-Encoding    gzip
Etag                "4b4a6d50f9acf924b9dce14e415f5c78"
Expires             Wed, 28 Jul 2010 17:00:28 GMT
Vary                Accept-Encoding
X-Powered-By        PHP/5.2.6
Last-Modified       Wed, 14 Jul 2010 16:59:35 GMT
Content-Length      39305
Content-Type        text/css

Примечание: я пропустил некоторые заголовки, не связанные с кэшированием, такие как keepAlive, server и т. Д.

Я должен такжеобратите внимание, что я условно распаковываю контент, отсюда и заголовок private cache-controlЧто мне здесь не хватает?Содержимое должно быть кэшировано из-за заголовка expires.Я генерирую etag из md5 с именем файла + отметка времени, так что он никогда не изменяется для файла.Last-Modified никогда не изменяется, Expires никогда не меняется ....

[EDIT]

Поэтому после дальнейшего тестирования мои css-файлы кэшируются, но мой javascriptне.Если у меня есть два файла с IDENTICAL заголовками кэширования (etag, expires, last-updated, cache-control), но единственное, что отличается, это тип содержимого (один "text / css", один "text / javascript"), ТОЛЬКО cssкешируется ... расстраивает

1 Ответ

0 голосов
/ 14 июля 2010

Это интересное упражнение, но мне кажется, что в долгосрочной перспективе, если ваш сайт начнет забиваться, комбинация на стороне сервера и переименование файлов могут добавить свои собственные издержки, которые могут быть хуже, чем просто загрузка нескольких дополнительных файлов.,Мне было бы интересно посмотреть некоторые статистические данные, чтобы узнать, как это влияет на нагрузку на сервер.

Я провел некоторую работу по редизайну для международного банка - моя команда перепроектировала более 1000 основных сайтов кредитных карт, некоторые из которых получилиболее 1 миллиона уникальных посетителей в день (довольно серьезный трафик). Один человек был полностью занят стандартами и оптимизацией.В конце мы сделали основы, такие как минимизация js-файлов и тому подобное, и широко использовали спрайты по причинам, которые вы пытаетесь преодолеть.Но после анализа последствий перехода на уровни, о которых вы говорите, было определено, что затраты в человеко-часах значительно превзойдут преимущества экономии затрат на пропускную способность - даже в ситуации, когда экономия 5 КБ / файл будет равняться 5 ГБ пропускной способности в день.

У вас есть копия "старого способа" ведения дел?Анализ, сравнивающий старое с новым после того, как вы его облизали, был бы классным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...