ASP.NET Core'da statik varlıkları paketleme ve küçültme
Tarafından Scott Addie ve David Pine
Bu makalede, bu özelliklerin ASP.NET Core web uygulamalarıyla nasıl kullanılabilebileceği de dahil olmak üzere paketleme ve küçültme uygulama avantajları açıklanmaktadır.
Paketleme ve küçültme nedir?
Paketleme ve küçültme, bir web uygulamasında uygulayabileceğiniz iki ayrı performans iyileştirmesidir. Birlikte kullanıldığında paketleme ve küçültme, sunucu isteklerinin sayısını azaltarak ve istenen statik varlıkların boyutunu azaltarak performansı artırır.
Paketleme ve küçültme öncelikli olarak ilk sayfa isteği yükleme süresini geliştirir. Bir web sayfası istendikten sonra tarayıcı statik varlıkları (JavaScript, CSS ve görüntüler) önbelleğe alır. Bu nedenle paketleme ve küçültme, aynı sitede aynı varlık isteğinde bulunan aynı sayfayı veya sayfaları isterken performansı iyileştirmez. Süre sonu üst bilgisi varlıklarda doğru ayarlanmamışsa ve paketleme ve küçültme kullanılmıyorsa tarayıcının güncellik buluşsal yöntemleri varlıkları birkaç gün sonra eski olarak işaretler. Ayrıca, tarayıcı her varlık için bir doğrulama isteği gerektirir. Bu durumda paketleme ve küçültme, ilk sayfa isteğinden sonra bile performans artışı sağlar.
Paketleme
Paketleme, birden çok dosyayı tek bir dosya halinde birleştirir. Paketleme, web sayfası gibi bir web varlığını işlemek için gereken sunucu isteklerinin sayısını azaltır. CSS, JavaScript vb. için özel olarak istediğiniz sayıda ayrı paket oluşturabilirsiniz. Daha az dosya, tarayıcıdan sunucuya veya uygulamanızı sağlayan hizmetten daha az HTTP isteği anlamına gelir. Bu, ilk sayfa yükleme performansının iyileştirilmesine neden olur.
Minification
Küçültme işlevi değiştirmeden gereksiz karakterleri koddan kaldırır. Sonuç, istenen varlıklarda (CSS, görüntüler ve JavaScript dosyaları gibi) önemli bir boyut azaltmasıdır. Küçültmenin yaygın yan etkileri arasında değişken adlarının bir karaktere kısaltılması ve açıklamaların ve gereksiz boşlukların kaldırılması yer alır.
Aşağıdaki JavaScript işlevini göz önünde bulundurun:
AddAltToImg = function (imageTagAndImageID, imageContext) {
///<signature>
///<summary> Adds an alt tab to the image
// </summary>
//<param name="imgElement" type="String">The image selector.</param>
//<param name="ContextForImage" type="String">The image context.</param>
///</signature>
var imageElement = $(imageTagAndImageID, imageContext);
imageElement.attr('alt', imageElement.attr('id').replace(/ID/, ''));
}
Küçültme işlevi şu şekilde azaltır:
AddAltToImg=function(t,a){var r=$(t,a);r.attr("alt",r.attr("id").replace(/ID/,""))};
Açıklamaları ve gereksiz boşlukları kaldırmaya ek olarak, aşağıdaki parametre ve değişken adları aşağıdaki şekilde yeniden adlandırıldı:
Özgün | Yeni -den adlandır |
---|---|
imageTagAndImageID |
t |
imageContext |
a |
imageElement |
r |
Paketleme ve küçültmenin etkisi
Aşağıdaki tabloda, varlıkları tek tek yükleme ile tipik bir web uygulaması için paketleme ve küçültme kullanma arasındaki farklar özetlenmiştir.
Eylem | B/M olmadan | B/M ile | Azaltma |
---|---|---|---|
Dosya İstekleri | 18 | 7 | %61 |
Aktarılan Bayt sayısı (KB) | 265 | 156 | %41 |
Yükleme Süresi (ms) | 2360 | 885 | %63 |
Yükleme süresi iyileştirildi, ancak bu örnek yerel olarak çalıştı. Ağ üzerinden aktarılan varlıklarla paketleme ve küçültme kullanılırken daha fazla performans kazancı elde edilir.
Yukarıdaki tabloda yer alan rakamları oluşturmak için kullanılan test uygulaması, belirli bir uygulama için geçerli olmayan tipik iyileştirmeleri gösterir. Paketleme ve küçültmenin iyileştirilmiş bir yük süresine neden olup olmadığını belirlemek için bir uygulamayı test etmenizi öneririz.
Paketleme ve küçültme stratejisi seçme
ASP.NET Core, açık kaynak paketleme ve küçültme çözümü olan WebOptimizer ile uyumludur. Kurulum yönergeleri ve örnek projeler için bkz . WebOptimizer. ASP.NET Core, yerel paketleme ve küçültme çözümü sağlamaz.
Gulp ve Webpack gibi üçüncü taraf araçlar paketleme ve küçültmenin yanı sıra lint ve görüntü iyileştirme için iş akışı otomasyonu sağlar. Paketleme ve küçültme kullanılarak, küçültülen dosyalar uygulamanın dağıtımından önce oluşturulur. Dağıtımdan önce paketleme ve küçültme, azaltılmış sunucu yükünün avantajını sağlar. Ancak paketleme ve küçültmenin derleme karmaşıklığını artırdığını ve yalnızca statik dosyalarla çalıştığını fark etmek önemlidir.
Ortam tabanlı paketleme ve küçültme
En iyi uygulama olarak, uygulamanızın paketlenmiş ve küçültüldü dosyaları bir üretim ortamında kullanılmalıdır. Geliştirme sırasında, özgün dosyalar uygulamanın hata ayıklamasını kolaylaştırır.
Görünümlerinizde Ortam Etiketi Yardımcısı'nı kullanarak sayfalarınıza eklenecek dosyaları belirtin. Ortam Etiketi Yardımcısı yalnızca belirli ortamlarda çalışırken içeriğini işler.
Aşağıdaki environment
etiket, ortamda çalışırken Development
işlenmemiş CSS dosyalarını işler:
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment names="Staging,Production">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
Aşağıdaki environment
etiket, dışında Development
bir ortamda çalışırken paketlenmiş ve küçültüldü CSS dosyalarını işler. Örneğin, içinde Production
çalışmak veya Staging
bu stil sayfalarının işlenmesini tetikler:
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
<environment names="Staging,Production">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
Ek kaynaklar
ASP.NET Core