2015-06-04 2 views
0

Я бы хотел оптимизировать кэширование статических активов (.js, .css, ... файлов), используемых в нашем Интернете. Моя цель основана на этой статье (https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#invalidating-and-updating-cached-responses).Как настроить статическое кэширование ресурсов с помощью apache?

Вкратце - поскольку эти статические активы, как правило, обновляются ad-hoc (иногда еженедельно, иногда два раза в день, ...). Я хотел бы кэшировать их с дальнейшим истечением срока и дать им уникальные имена на основе дату или дату изменения или аналогичные. Это должно позволить им кэшировать в течение длительного времени, но обновлять их, как только происходят некоторые изменения.

Этот метод поддерживается сервером Apache2? Или есть ли какая-нибудь система среднего уровня, которая обрабатывает отпечатки пальцев, генерируя (иметь уникальные имена активов) и обновляя ссылки на них в HTML-файле (который вообще не будет кэшироваться)?

Мы используем стек LAMP на нашем хосте.

Спасибо заранее

+0

@AlisterBulman & '@sitilge Благодарим вас обоих, прочитайте все рекомендованные вами статьи. Получил также рекомендации от другого парня использовать [Модуль PageSpeed ​​для Apache] (https://developers.google.com/speed/pagespeed/module/configuration). Вы знаете, может ли это быть хорошим решением? – krajicek

+0

выберите ответ, который помог (и, как считается, решить проблему), и вознаградите соответствующего автора :) о модуле pagespeed - если вы минимизируете, кешируете, оптимизируете код самостоятельно, то использование модуля будет накладным. В противном случае это может быть полезно. – sitilge

ответ

0

Существует несколько методов, некоторые лучше других. Один хороший один должен иметь следующую конфигурацию:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1.$3 [L] 
</IfModule> 

Это позволяет URL-адреса вида /i/filename.1433499948.gif - но файл, который на самом деле читать с диска всего /i/filename.gif части 1 и 3 из файла.

Эта строфа Apache vhost/.htaccess находится в файле H5BP filename-based_cache_busting.conf, и в репозитории есть другие примеры передового опыта.

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

0

Вы можете включить mod_mime, mod_expires для Apache и использовать следующий фрагмент

<FilesMatch "\.(png|jp?g|gif|ico|mp4|wmv|mov|mpeg|css|map|woff?|eot|svg|ttf|js|json|pdf|csv)"> 
    ExpiresActive on 
    ExpiresDefault "access plus 2 weeks" 
</FilesMatch> 

Или установить соответственные php заголовков

session_cache_limiter('none'); 
header('Cache-control: max-age='.(60*60*24*7)); //one week 
header('Expires: '.gmdate(DATE_RFC1123,time()+60*60*24*365)); //one week 

также соответствующую статью здесь: How to get the browser to cache images, with php?