CSS ve JS URL'lerini sürümlendirmenin en iyi yolu nedir?


26

Sitenizi Hızlandırmak İçin Yahoo'nun çok ballyhooed En İyi Uygulamaları'na göre , gelecekteki çok fazla önbellek sona erme üstbilgileri kullanarak bir CDN'den statik içerik sunuyoruz. Elbette, bu "statik" dosyaları ara sıra güncellememiz gerekir, bu nedenle şu anda dosya adının bir parçası olarak bir ek sürümü ekleriz (dosya içeriğinin SHA1 toplamına dayanarak). Böylece:

styles.min.css

Oluyor:

styles.min.abcd1234.css

Ancak, sürümlenmiş dosyaları yönetmek sıkıcı olabilir ve bir GET argüman notasyonunun daha temiz ve daha iyi olup olmadığını merak ediyordum:

styles.min.css?v=abcd1234

Hangisini kullanıyorsunuz ve neden? Göz önünde bulundurmam gereken tarayıcı ya da vekil / önbellekle ilgili düşünceler var mı?


Sormamın nedeni, GET-argüman stilini kullanmamak için bir neden duyduğumu hatırlıyor gibiyim ama nedenini hatırlayamıyorum.
David Eyk

GET-argümanını kullanmak, stil sayfasına bir çeşit sunucu tarafı betiği ile hizmet etmeyi gerektirmiyor mu (Ve artık statik olmaz)?
Lotus Notes

@Lotus: GET-argümanlarını gönderebilir ve eğer bir şey aramıyorsa sessizce yoksayılır.
David Eyk

Yanıtlar:


10

Google’ın Web’i Daha Hızlı Yapmasına göre , sorgu parametrelerine sahip sayfalar birçok HTTP proxy tarafından önbelleğe alınmaz.

Çoğu proxy, en çok sürüm 3.0 ile Squid, kaynakları bir "?" İle önbelleğe almaz URL’sinde Cache-control: public, yanıtta bir başlık olsa bile . Bu kaynaklar için proxy önbelleğe almayı etkinleştirmek için, sorgu dizelerini referanslardan statik kaynaklara kaldırın ve bunun yerine parametreleri dosya adlarına kodlayın.

Yani styles.min.abcd1234.csstercih çözümdür. Şeffaf bir styles.min.abcd1234.cssşekilde uygulanmasını kolaylaştırmak için uygun bir URL yeniden yazma mekanizması kullanabilirsiniz styles.min.css?v=abcd1234.

Yalnızca HTTPS'yi destekliyorsanız, proxy'ler normalde SSL üzerinden sunulan sayfaları önbelleğe atamadığından bu tavsiye geçerli değildir.


2
Sorgu dizesi önbelleğe alma ve proxy sunucuları ile ilgili bilgiler biraz tarihli olup olmadığını merak ediyorum? Google’ın dokümanları artık bu bağlamda sorgu dizelerine ve proxy sunucularına referans vermiyor. Her ne kadar örnekler hala dosya ismini değiştirmeyi içeriyorsa da. Squid 2.7 (2008) ve 3.1 (2010) tarafından varsayılan olarak sorgu dizesi önbelleğe almayı destekledikleri bildirildi ve önceki sürümler bunu destekleyecek şekilde yapılandırılabilir.
MrWhite

15

GET tarzı sürümlemeyi kullanmak, boş bir önbellekten birden çok URL - örneğin style.css?v=123ve style.css?v=456- aynı içeriği döndürür. Ancak bunun sorunlu olacağını göremiyorum, özellikle de aynı anda yalnızca birisiyle bağlantı kurduğunuz için.

Bence GET stilinin bakımı çok daha kolay olacak. Ayrı dosyalara ihtiyacınız yok: sadece URL’yi değiştirin; tarayıcılar CSS’yi yeniden getirecektir.

GÜNCELLEME: daha fazla araştırmada, bir sorgu dizesi kullanmanın dosyaları önbelleğe alma tarayıcıları durdurabileceği anlaşılıyor . Ancak, bu gibi uygun başlıkları iade ediyorsanız Expires, bir sorun değildir.

GÜNCELLEME 2: kabul edilen cevap, bazı proxy sunucularının dosyaları bir sorgu dizesiyle önbelleğe almadıklarına işaret eder. Ancak bu eski bilgilere dayanmaktadır; Squid'de bahsettiği özel konu 7 yıl önce düzeltildi. Etkileyici Web'ler bu konuda iyi bir yazı yazdı .


Bu hatırlamaya çalıştığım ihmal. Bağlantı için teşekkürler.
David Eyk

1

Her ikisi de eşit derecede işe yarar, çünkü bir sorgu dizesi URL'nin bir parçası olarak kabul edilir ve onu değiştirerek kaynağın adını değiştirerek, tarayıcının dosyanın yeni bir kopyasını almasına neden olursunuz.

Bakımını yapmak için hangisi daha kolaysa onu kullan derim.


0

bu yukarıdaki sorunun cevabı değil , daha iyi bir çözüm istiyorum bu yüzden burada kendime soruyorum

Her iki yöntem de, css ve js dosyalarının yönlendirildiği dosyalarda değişiklik yapılmasını gerektirir. Bu nedenle uygulamada değişiklik yapıldıktan sonra uygulama sunucusunun yeniden başlatılması gerekir.

Statik dosyaların sürümlerinin Uygulama sunucusunu yeniden başlatmaya gerek kalmadan kullanılabileceği daha iyi bir yol var mı?

çözümde aşağıdakiler göz ardı edilir:

  • css ve js dosya isimlerinin değiştirilmesi
  • URL'de bir sorgu paremeterini geçirme

çözüm, önbellek kontrolünün ayarlanmasını etkilememeli veya sona ermelidir.

Teşekkürler


1
Burada yenisin. Bu iyi bir soru. Bunu, belki de referans olarak bu soruya bağlayarak, böyle yayınlamanız gerekir. Bunu moderatör dikkatine yönlendirdim, böylece size yardımcı olabilirler.
David Eyk,

David'in belirttiği gibi, bu site diğer forum sitelerine benzemez. Sormak için yeni bir sorunuz varsa, "bir soru sor düğmesini" tıklamaktan çekinmeyin
Mark Henderson

Bu yararlı bir açıklamadır. Stil sayfanızı değiştirirseniz, site içinde yüzlerce referansı güncellemek yerine, adı ve referansı aynı tutmak tercih edilir.
Mark Stosberg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.