Який найкращий спосіб отримати URL-адреси CSS та JS?


26

Відповідно до найкращих практик Yahoo щодо покращення швидкості вашого сайту , ми подаємо статичний вміст з CDN, використовуючи заголовки закінчення терміну дії кешу. Звичайно, нам потрібно періодично оновлювати ці "статичні" файли, тому ми наразі додаємо інфіксовану версію як частину імені файлу (на основі суми SHA1 вмісту файлу). Таким чином:

styles.min.css

Стає:

styles.min.abcd1234.css

Однак керування файлами з версією може стати втомливим, і мені було цікаво, чи може позначення аргументу GET бути більш чистим та кращим:

styles.min.css?v=abcd1234

Що ви використовуєте, і чому? Чи варто враховувати міркування щодо браузера або проксі / кеша?


Причина, яку я запитую, полягає в тому, що я, начебто, згадую почуття причини НЕ використовувати стиль GET-аргументу, але не можу пригадати, чому.
Девід Ейк

Чи не використання GET-аргументу не вимагає подання таблиці стилів з якимось скриптом на стороні сервера (і він більше не буде статичним)?
Lotus Notes

@Lotus: Ви можете надіслати GET-аргументи, і вони будуть мовчки ігноруватися, якщо нічого не шукають.
Девід Ейк

Відповіді:


10

Згідно з даними Google " Зробити веб-швидше" , сторінки з параметрами запиту не кешуються багатьма проксі-серверами HTTP.

Більшість проксі-сервісів, особливо примітка "Кальмар" через версію 3.0, не кешують ресурси з "?" в їхній URL-адресі, навіть якщо Cache-control: publicу відповіді присутній заголовок. Щоб увімкнути кешування проксі для цих ресурсів, видаліть рядки запитів із посилань на статичні ресурси та замість цього закодуйте параметри в самі імена файлів.

Так styles.min.abcd1234.cssє кращим рішенням. Ви можете скористатися відповідним механізмом перезапису URL-адрес, щоб перетворити його styles.min.abcd1234.cssв простіший styles.min.css?v=abcd1234прозорий процес.

Якщо ви підтримуєте лише HTTPS, ця порада не застосовується, оскільки проксі-сервери не можуть нормально кешувати сторінки, які надходять через SSL.


2
Цікаво, чи інформація про кешування рядків запитів і проксі-серверів датована? У цьому контексті документи Google більше не посилаються на рядки запитів та проксі-сервери. Хоча приклади все ж включають зміну самого імені файлу. Як повідомляється, Squid 2.7 (2008) та 3.1 (2010) підтримують кешування рядків запитів за замовчуванням, і більш ранні версії можуть бути налаштовані для його підтримки.
MrWhite

15

Використовуючи версію в стилі GET, із порожнього кешу декілька URL-адрес - наприклад, style.css?v=123та style.css?v=456- повертають один і той же вміст. Однак я не можу бачити, що це буде проблематично, тим більше, що ви посилаєтесь лише на одне.

Я думаю, що ви знайдете стиль GET набагато простіше в обслуговуванні. Вам не потрібні окремі файли: просто змініть URL-адресу, і браузери отримають CSS заново.

ОНОВЛЕННЯ: при подальших дослідженнях виявляється, що використання рядка запиту може зупинити браузери кешування файлів. Однак якщо ви повертаєте належні заголовки, такі як Expiresце, це не проблема.

ОНОВЛЕННЯ 2: прийнята відповідь вказує на те, що деякі проксі-сервери не кешують файли з рядком запиту. Однак це базується на старій інформації; особливе питання, про яке вони згадують у кальмарах, було вирішено 7 років тому. Вражаючі Вебси добре написали на цьому питання.


Це застереження, яке я намагався запам'ятати. Дякуємо за посилання
Девід Ейк

1

Обидва будуть працювати однаково добре, оскільки рядок запиту вважається частиною URL-адреси, і, змінюючи його, ви фактично змінюєте ім’я ресурсу, тим самим змушуючи браузер отримати нову копію файлу.

Я кажу, що використовувати той метод, який вам легше підтримувати.


0

це не відповідь на вищезазначене питання , я хочу кращого рішення, тому я тут сам прошу

Обидва методи вимагають модифікації файлів, куди посилаються файли css та js. Тож фактично потрібно буде перезапустити сервер додатків після внесення змін.

Чи є кращий спосіб, коли можна обробляти версії статичних файлів без перезавантаження сервера додатків?

у розчині виключається наступне

  • зміна назви файлів css та js
  • передаючи парометр запиту в URL-адресі

рішення також не повинно впливати на встановлення кеш-контролю або закінчується.

Спасибі


1
схоже, ви тут новачок. Це гарне запитання. Ви можете опублікувати його як таке, можливо, посилаючись на це питання для довідки. Я позначив це для уваги модератора, щоб вони могли вам допомогти.
Девід Ейк

як вказував Девід, цей сайт не схожий на інші веб-сайти форуму. Якщо у вас є нове запитання, не соромтесь натиснути кнопку "задати питання"
Марк Хендерсон

Це корисне уточнення. Якщо ви зміните свою таблицю стилів, бажано буде зберегти ім’я та посилання на те саме, а не оновлювати сотні посилань на нього на сайті.
Марк Стосберг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.