Які жорсткі та швидкі правила кешування кеша?


15

Сповідь : на сайтах, які я підтримую, є різні правила керування кешем, в основному на основі конфігурації сервера за замовчуванням з подальшими рекомендаціями з плагінів Page Speed & Y-Slow Firefox та вигляд мережевих ресурсів у програмі Google Tracer Speed . Кеш-контроль встановлюється приватним / загальнодоступним залежно від того, що вони говорять, заголовки ETag / Last-модифіковані лише за умови, що Y-Slow припускає, що щось не так, і Vary-Accept-Encoding здається необхідним, коли вручну gziping файли для Amazon CloudFront.

При перегляді матеріалу про різні варіанти та те, що вони там роблять, здається, суперечлива інформація, правила щодо непрацездатних проксі та конфігурацій культового культу . Будь-яка офіційна інформація, що надається згаданими вище інструментами аналізу, є досить недоступною, оскільки вона розглядає кожну тему окремо, а не як єдину стратегію (тому немає перехресних посилань на методики).

Наприклад, мабуть, немає сенсу, що інструменти аналізу швидкості оцінюють сайт із ETag таким же, як і сайт без них, якщо вони призначені для допомоги у кешуванні.

Які жорсткі та швидкі правила для стратегії кеш-кегу кеш-керування?

Редагувати:

Посилання через статтю Джеффа Етвуд пояснює Кешування в чудовій глибині.

Для запису, хоча тут є жорсткі та швидкі правила:

Якщо файл стискається за допомогою GZIP тощо - використовуйте "кеш-контроль: приватний", як проксі може повернути стиснуту версію клієнту, який не підтримує його (хоча кеш браузера буде містити файли, позначені таким чином). Також не забудьте включити "Варіант: Прийняти-кодування", щоб сказати, що він стисливий.

Використовувати Last-Modified у поєднанні з ETag - використання ременів і підтяжок надає обидва валідатори, тоді як ETag заснований на вмісті файлу, а не на часі модифікації, використовуючи обидві обкладинки всіх баз. ПРИМІТКА: AOL's PageTest чомусь застосував карт-бланш проти ETags. Якщо ви використовуєте Apache на декількох серверах для розміщення одного вмісту, тоді видаліть неявно оголошений inode з ETags, виключивши його з директиви FileETag (тобто "FileETag MTime Size"), якщо ви справді не використовуєте ту саму живу файлову систему.

Куди можна, використовуйте "кеш-контроль: громадський" - це означає, що проксі-сервери (і кеш браузера) повернуть ваш вміст, навіть якщо на іншій сторінці потрібна HTTP-аутентифікація тощо.

Відповіді:


8

По-перше, не позбавляйтеся від ETag, як каже Yahoo, якщо тільки ви не використовуєте ферму / кластер серверів. Поки той самий файл завжди повертає той самий ETag, коли він не змінився, це дуже корисна директива.

Що стосується інших заголовків, найкращі практики Yahoo пропонують встановити далекий майбутній Expiresзаголовок для статичних файлів і використовувати Cache-Controlдля динамічного контенту. Однак Cache-controlідеально підходить для статичного вмісту (майже немає різниці між ними).

При зміні кешованих статичних файлів вам потрібно буде змінити ім'я файлу або додати унікальний параметр до кінця, наприклад example.com/styles.css?v=2. Зміна фактичного імені файлів є кращим, як зазначено в коментарях нижче.

Між іншим, ви можете редагувати правила YSlow на свій смак, видалити правило Etag та додати власний домен як CDN. Ця стаття також добре прочитана: Проблеми Yahoo не ваші проблеми


ETag мав сенс в Apache, роблячи "FileETag MTime Size" замість за замовчуванням, який включає в себе inode (на FS настільки ненадійний) на Y-Slow. Однак рекомендації щодо найкращих практик Yahoo є дещо заплутаними в порівнянні з Page Speed's. Наприклад, він говорить про використання Cache-Control тільки на динамічних сторінках (як ви також пропонуєте), але Google пропонує використовувати Cache-Control: public для статичних CSS та Cache-Control: приватних для файлів GZipped Amazon Cloudfront вручну.
Metalshark

Важко знати, що можна зробити із цієї поради щодо проксі. Google просто каже: "У деяких публічних проксі є помилки ...", але він не говорить про те, наскільки це поширено. Радимо встановити заголовок Vary: Accept-Encoding, дивіться внизу code.google.com/speed/page-speed/docs/caching.html
Незадоволене голову

Додавання параметра запиту вимикає кешування цього файлу повністю у деяких браузерах. Тож ви, можливо, захочете скористатись підходом "змінити ім'я файлу", наприклад,example.com/style_v2.css
Євген

@Evgeny: Які браузери? Я чув це раніше, але ніколи не бачив браузера, який насправді не кешує файл (особливо якщо у вас є правильні заголовки).
НезадоволенеЗакриття

@DisgruntledGoat насправді після деякого копання здається, що це реліквія з епохи http / 1.0, де вона була частиною специфікації, що фактично зазначений користувальницький агент не повинен кешувати активи, у яких є рядки запитів. З іншого боку, code.google.com/speed/page-speed/docs/caching.html стверджує, що саме проксі-сервери (кальмар <3.0) не кешуватимуть активи, і, таким чином, використовуючи рядки запиту для розбиття кешу, не рекомендується.
Євгеній

0

Змінення заголовків запитів ваших ресурсів для використання кешування Для більшості людей способом зручного кешування є додавання коду до файлу під назвою .htaccess на веб-хості / сервері.

Це означає, що ви перейдете до файлового менеджера (або куди б ви не додавали або завантажували файли) на своєму веб-хості.

Файл .htaccess контролює багато важливих речей для вашого сайту. Якщо ви не знайомі з файлом .htaccess, будь ласка, ознайомтеся зі статтею .htaccess, щоб дізнатися, як змінити його.

Нижче наведений код повідомляє веб-переглядачам, що потрібно кешувати і як довго "запам'ятати" його. Його слід додати у верхню частину вашого файлу .htaccess.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

Збережіть файл .htaccess, а потім оновіть веб-сторінку.

Джерело:
https://varvy.com/pagespeed/leverage-browser-caching.html


Майже кожен приклад ExpiresByTypeдиректив, які я бачу, включає тип mime text/x-javascript- ваш сервер реально відповідає на цей тип вмісту ?! (Приклад сліпої копії / вклеювання IMO.)
MrWhite
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.