SORU
7 EYLÜL 2012, Cuma


Nasıl BundleCollection MVC4 önbelleğe script demetleri floş zorlamak için

... ya danasıl endişelenmeyi bırakıp sadece Microsoft tamamen belgelenmemiş API karşı kod yazmayı öğrendim. Orada herhangi bir gerçek belge resmi System.Web.Optimization serbest? çünkü eminim bulamıyorum, yok XML dokümanlar ve tüm blog yazıları başvurmak için RC API hangisi önemli ölçüde farklı. .. Her neyse

Otomatik olarak javascript bağımlılıkları gidermek ve bu bağımlılıkları anında demetleri oluşturmak için bazı kod yazıyorum. Her şey mükemmel çalışıyor, komut dosyaları düzenlemek veya başka uygulamayı yeniden başlatmadan bir paket etkileyecek bir değişiklik yaptığınızda, değişikliklerin yansıması olmayacak. Geliştirmede kullanmak için bağımlılıklar önbelleğini devre dışı bırakmak için bir seçenek eklendi.

Ancak, görünüşe göre 2* *önbelleğe URLeğer paket toplama değişti bile. Yeniden oluşturmak istediğimde kendi Şifremi örneğin, bir paket böyle bir şey yapıyorum:

// remove an existing bundle
BundleTable.Bundles.Remove(BundleTable.Bundles.GetBundleFor(bundleAlias));

// recreate it.
var bundle = new ScriptBundle(bundleAlias);

// dependencies is a collection of objects representing scripts, 
// this creates a new bundle from that list. 

foreach (var item in dependencies)
{
    bundle.Include(item.Path);
}

// add the new bundle to the collection

BundleTable.Bundles.Add(bundle);

// bundleAlias is the same alias used previously to create the bundle,
// like "~/mybundle1" 

var bundleUrl = BundleTable.Bundles.ResolveBundleUrl(bundleAlias);

// returns something like "/mybundle1?v=hzBkDmqVAC8R_Nme4OYZ5qoq5fLBIhAGguKa28lYLfQ1"

Her ne zaman I kaldırın ve bir paket oluşturunaynı takma adı ilebundleUrl ResolveBundleUrl iade & paket çıkardım yeniden. daha önce olduğu gibi aynı şey oluyor , kesinlikle: "Aynı" içerik karma değişmeden paket yeni içeriğini yansıtacak şekilde yani.

edit... aslında o kadar kötü değil.paketi kendisinasılsa Bundles koleksiyon dışında önbelleğe. Eğer ben sadece, ASP.NET verir . bu komut önbelleğe tarayıcı önlemek için kendi rastgele karma oluşturmak ^em>eski senaryo. Yani, görünüşe göre, BundleTable.Bundles bir paket kaldırmanın ne kadar zor bir şey yapmaz.

Ben sadece değişim diğer vakit bu sorun, ve bu iyi gelişme, ama ben beğenmedim bu fikri beri demek ya ben iptal etme takma sonra her sayfa yük, ya da bir BundleCollection yetişen boyutunu her sayfa yük. Eğer bu konuda bir üretim ortamında bırakılırsa, bir felaket olur.

Bir komut dosyası sunulduğunda, BundleTables.Bundles gerçek nesne bağımsız önbelleğe alır gibi görünüyor. Eğer öyleyse yeniden kullanmak bir URL, hatta eğer kaldırıldı paket o havale için önce yeniden kullanma, yanıt ne olacaksa, kendi önbellek ve değiştirme Bundles nesne değil flush cache -- yani sadeceyeniöğeleri (ya da daha doğrusu, farklı bir isim ile yeni öğeler) hiç kullanılacaktır.

Bu davranış tuhaf görünüyor... koleksiyonundan bir şeyler çıkarma önbelleğinden kaldırın. Ama olmuyor. Bu önbelleğini temizler ve bu paket ilk girildiği sırada önbelleğe alınan şey yerine BundleCollection geçerli içeriğini kullanmak için bir yolu olmalı.

Bunu yapacağımı nasıl bir fikriniz var mı?

Bilinmeyen bir amacı olan ResetAll Bu yöntem var ama yine de bir şeyler keser değil mi yani.

CEVAP
7 EYLÜL 2012, Cuma


Belgeler üzerinde acı duyuyoruz, ne yazık ki bu özellik hala çok hızlı değişiyor, ve belgeleri üreten bir gecikme var, ve hemen güncelliğini yitirmiş olabilir. Rick's blog post güncel, ve burada soruları cevaplamak için de bu arada güncel bilgi yaymak için çalıştım. Şu anda her zaman geçerli belgelere sahip olan resmi diğer sitemizi kurma sürecindeyiz.

Şimdi sifonu çekmeyi nasıl sorununuzla ilgili demetleri önbelleği oluşturur.

  1. Biz mağaza birlikte yanıt içinde ASP.NET cache kullanarak bir anahtar oluşturulan kapalı paket istenen url, yani Context.Cache["System.Web.Optimization.Bundle:~/bundles/jquery"] biz de Kur önbellek bağımlılıkları karşı tüm dosya ve dizinler olduğunu kullanılan oluşturmak için bu paket. Eğer alttaki dosya veya dizinlerin herhangi bir değişiklik olursa, önbellek girdisi boşaltıldı.

  2. Gerçekten başına isteği olarak BundleTable/BundleCollection güncellenmesi Canlı Destek vermiyoruz. Bu tam olarak desteklenen bir senaryo olduğunu demetleri yapılandırılmış sırasında uygulamayı başlatmak(bu yüzden her şey düzgün çalışıyor web çiftliği senaryo, aksi takdirde bazı paket istekleri olur sonunuzun 404 eğer gönderilen yanlış sunucu). Kod örneği, bakıyor, benim tahminim paket koleksiyonu özel bir istek üzerine dinamik olarak değiştirmek için çalışıyorsunuz? Paket yönetimi/yeniden her türlü şeyi doğru Kur olmuştur garanti uygulama sıfırlama eşlik etmelidir.

App geri dönüşüm olmadan paket tanımları değiştirmek önlemek etki alanı. Otomatik olarak tespit edilmesi sizlerin demetleri, içindeki dosyaları değiştirme ve paket urls için yeni hashcodes oluşturmak için özgürsünüz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CMTelly

    CMTelly

    2 Mayıs 2007
  • Felice Musique

    Felice Musiq

    22 NİSAN 2014
  • Random Act of Kindness Video Contest

    Random Act o

    18 EYLÜL 2012