Soru css, resimler ve js önbellek nasıl?


Bir web sayfasını yüklediklerinde tarayıcılarında, css ve javascript'in istemci tarafında önbelleğe sahip olmasını isterim. Asp.net mvc ile kullanmak için çok farklı önbellekleme türleri vardır.

Ayrıca, tarayıcılarının bu dosyaların yeni veya değiştirilmiş sürümlerini kontrol etmeleri mümkün mü?

Teşekkürler!


25
2018-01-20 22:23


Menşei




Cevaplar:


Tarayıcılar, sizin için otomatik olarak bununla ilgilenir. Css, js, html ve görüntüleri önbelleğe almamak için yoldan çıkmanız gerekiyor.

Ben ASP MVC ile aşina değilim, ama onlar sizin oluşturduğunuz dinamik çıktı sunucu tarafı için opcode önbelleğe alma olduğunu düşündüğünüz önbelleğe yazma türlerini düşünüyorum?


6
2018-01-20 22:25



İşler gerçekten bu kadar basit değil. Hatasız ve iyi performans gösteren bir siteyi önemsiyorsanız, önbellekleme önemlidir. İçeriği yeniden indiren ziyaretçilerden kaçınmak istersiniz, ancak aynı zamanda güncel olmayan içeriğe sahip ziyaretçilerden de kaçınmak istersiniz. ASP.NET MVC'de, URL'de, kurulduktan sonra çok fazla düşünmeden ulaşan bir MD5 hashını içeren bir yaklaşım kullanıyorum. Kontrol cevabımı burada kaynak kodu için. - Drew Noakes
@Drew Sure, bu önbelleklemeye genel bir bakış olması amaçlanmamıştı. Askere daha iyi bir kontrole ihtiyacınız yoksa, tarayıcılarda ve sunuculardaki mevcut varsayılanların çok kötü olmadığını söyleyin. Apache genellikle ETag'ları vb. Sunmak için yapılandırılmıştır ve tarayıcılar genellikle 304'lerle birlikte çalışır. Çözümünüzü kontrol ettiniz ve bu iyi bir fikir! Bu fikri yakında Django'da kullanıyorum. - JAL


Sunucuya önbellek denetim üstbilgileri ayarlamanız gerekir. Bunu web.config dosyanıza yapıştırarak yapabilirsiniz:

<system.webServer>
  <staticContent>
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
  </staticContent>
</system.webServer>

Bu, tarayıcıya artık 30 gün boyunca statik bir şeyle ilgili yeni içeriği kontrol etmesini söyler.

İkinci sorunuz için, içeriğe querystring eklemenin bazı mekanizmalarını sağlayın. Şu anki projemde, derlemeyi ve birleştirmeyi, javascript ve css'i yapının parçası olarak birleştiriyoruz. Sayfadaki bağlantıları yerleştirirken şöyle görünür:

<script src="/Resources/Javascript/Combined.js?v=2.2.0.1901" type="text/javascript"></script>

Querystring, Major.Minor.0.Changeset numarasıdır ve her zaman bir yapıyı zorladığımız zaman değiştirir ve istemcinin yeniden getirilmesini sağlar. Aynı kesin şey, stil sayfalarında <link> öğesi.


44
2018-01-20 22:32



İstemci önbelleği de html'yi önbelleğe alır mı? Sadece script'leri, css'leri ve görüntüleri (html'yi değil) önbelleğe alarak ajax'ı yoğun olarak kullanan hesap alanlarını hızlandırmak istiyorum. Bunun için ne önerirsiniz? - chobo
@chobo: Bu sadece statik içeriği etkiler ... Bu, ASP.Net'in (resim, css, js) yapmadığı şeylerin nasıl halledileceği konusunda bir yönerge. Bir aspx gibi dinamik bir şey yapar DEĞİL Bu başlığı al ve önbelleğe alınamaz. - Nick Craver♦
Sürümler için sorgu dizelerini kullanmak, bazı proxy sunucularının dosyayı önbelleğe almaması anlamına gelir. Doğrudan URL'ye koymadan iyidir. Ve eğer bunu yapacaksanız, dosya içeriğinin MD5 karmasını kullanın ve kimlik kavramı için sürüm kavramını değiştirin. bende biraz var buradaki kaynak kodu o anda bunu nasıl yaptığımı gösterir. Düşünceleri ve geri bildirimleri takdir eder. - Drew Noakes
@Drew - yup, Stack Exchange'de yaptığımız işte bu - sorgu dizgisiyle uğraşmamız dışında. Farklı sorgu dizeleri farklı içeriklere uymayan bir proxy'nin arkasındaysanız, çok daha büyük sorunlarınız var. - Nick Craver♦
Şu anda mvc için System.web.optimization paketlerinin bir günlüğüne otomatik olarak sorgu dizisi kısmına bakacağını düşünüyorum. - Dylan Hayes


@Paul Creasey ve @Salsa, tarayıcının, bağlantı aynı olduğu sürece önbelleğe alma işlemlerini varsayılan olarak ele alacağı konusunda hem doğrudur.

Bahsettiğiniz gibi, bu dosyaların güncellenmesi gerektiğinde, istemcinin tarayıcısının güncellenmiş bir sürümü kontrol edeceğine dair hiçbir garantiniz olmadığı için bir sorun ortaya çıkar. Çoğu durumda, bunu yalnızca crummy kullanıcı deneyimi yaratabilecek sabit bir süre geçtikten sonra yaparlar.

Bu sitede, istemci tarayıcıları uyarmak için nasıl ele alınacağını sorduğumuz birkaç soru var. önbelleği yenilemek. Kısacası, dosyanın içeriğini değiştirdiğinizde bağlantıyı değiştirmeye güveniyorlar.

URL'ye, yalnızca aşağıdaki gibi önbellekleme amacıyla kullanılacak bir parametre ekleyebilirsiniz:

<script src="/myJavascript.js?version=4"></script>

Daha sonra, içeriği değiştirdiğinizde ve müşteri tarafında yenileme alabilmeniz gerektiğinde sürüm numarasını değiştirin. bu cevap.


4
2018-01-20 22:32





Bir göz atın cevap gönderdim burada önbelleğe almayı kullanmanın yararını en üst düzeye çıkartan ve kullanıcıların 'zor' yenilemeye ihtiyaç duyan herhangi bir sorunu önleyen bir çözüm içinCtrl+F5).

URL'nin içeriğin kendisinin bir MD5 karmasını kullanır, böylece URL, dosya aynı olduğu sürece aynı kalır, bu gerçekten amaçtır. Karma işlemin hesaplanması süper hızlıdır ve sunucuda bellekte önbelleğe alınır, bu nedenle sayfa oluşturma işlemi yavaş yavaş yavaşlatılmaz. Her şey mikrosaniye cinsinden ölçülür ve faydalar ( tüplü dalgıçlar için sitem) şimdiye kadar harika. Sitemde sunucu tarafından oluşturulmadıkları için, CSS ve CSS dosyalarındaki resimler haricindeki tüm resimlere, CSS ve JS'ye uyguladım (henüz.)


2
2018-06-22 15:24





Bu en iyi IIS'de veya yapılandırma dosyanızda yapılır - CSS / JS / görüntülerinizin zaman aşımına uğramadan ayarlandığından emin olun.

Bunları kodunuzdan referans olarak kullandığınızda, dosya adına bir sürüm veya oluşturma tarihi eklemeyi öneririm. script.js? 20100120, böylece onları değiştirmeye geldiğinizde, sadece önbelleğe almış olan tüm tarayıcılardan bir yenilemeyi zorlamak için sürümü değiştirmeniz gerekir.


0
2018-01-20 22:33





İstemci tarafı önbelleğe alma, tarayıcılar tarafından otomatik olarak işlenirken doğru ayarlanmış  Önbellek denetimi üstbilgileri ve web.config öğesini ayarlayın. Bunun gibi :

<system.webServer>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00.00:10:00" />
    </staticContent>
</system.webServer>

-2
2018-01-20 22:26



Gerçekten bu kadar basit değil. HTTP yanıtında uygun üstbilgileri sağlamalısınız. Ayrıca, içeriğiniz değiştiğinde tarayıcıların önbelleklerini geçersiz kılmalarını söylemeniz gerekir, aksi halde site zor bir yenileme yapana kadar başarısız olur. - Drew Noakes