Balení a minifikace statických prostředků v ASP.NET Core
Scott Addie a David Pine
Tento článek vysvětluje výhody použití sdružování a minifikace, včetně způsobu použití těchto funkcí s webovými aplikacemi ASP.NET Core.
Co je sdružování a minifikace
Sdružování a minifikace jsou dvě různé optimalizace výkonu, které můžete použít ve webové aplikaci. Společné použití, sdružování a minifikace zlepšují výkon snížením počtu požadavků na server a snížením velikosti požadovaných statických prostředků.
Sdružování a minifikace primárně vylepšují dobu načítání požadavků na první stránku. Po vyžádání webové stránky prohlížeč ukládá statické prostředky do mezipaměti (JavaScript, CSS a obrázky). Sdružování a minifikace tedy nezlepšují výkon při vyžádání stejné stránky nebo stránek na stejném webu, který požaduje stejné prostředky. Pokud není hlavička vypršení platnosti u prostředků správně nastavená a pokud se nevyužívá sdružování a minifikace, heuristika prohlížeče označí zastaralá aktiva po několika dnech. Prohlížeč navíc vyžaduje žádost o ověření pro každý prostředek. V tomto případě sdružování a minifikace poskytují zlepšení výkonu i po požadavku na první stránku.
Svazkování
Sdružování kombinuje několik souborů do jediného souboru. Sdružování snižuje počet požadavků serveru, které jsou nezbytné k vykreslení webového prostředku, například webové stránky. Můžete vytvořit libovolný počet jednotlivých sad speciálně pro šablony stylů CSS, JavaScript atd. Méně souborů znamená méně požadavků HTTP z prohlížeče na server nebo ze služby poskytující vaši aplikaci. Výsledkem je vylepšený výkon načítání na první stránce.
Minification
Minifikace odebere nepotřebné znaky z kódu beze změny funkčnosti. Výsledkem je významné snížení velikosti požadovaných prostředků (například souborů CSS, obrázků a javascriptových souborů). Mezi běžné vedlejší účinky minifikace patří zkrácení názvů proměnných na jeden znak a odebrání komentářů a nepotřebných prázdných znaků.
Představte si následující funkci JavaScriptu:
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/, ''));
}
Minifikace zmenšuje funkci na následující:
AddAltToImg=function(t,a){var r=$(t,a);r.attr("alt",r.attr("id").replace(/ID/,""))};
Kromě odebrání komentářů a nepotřebných prázdných znaků se následující názvy parametrů a proměnných přejmenovaly takto:
Původní | Přejmenovaný |
---|---|
imageTagAndImageID |
t |
imageContext |
a |
imageElement |
r |
Dopad sdružování a minifikace
Následující tabulka popisuje rozdíly mezi individuálním načítáním prostředků a používáním sdružování a minifikace pro typickou webovou aplikaci.
Akce | Bez B/M | S B/M | Redukce |
---|---|---|---|
Požadavky na soubory | 18 | 7 | 61 % |
Převedené bajty (KB) | 265 | 156 | 41 % |
Doba načítání (ms) | 2360 | 885 | 63 % |
Doba načítání se zlepšila, ale tento příklad běžel místně. Při použití sdružování a minifikace s prostředky přenášenými přes síť se zjišťují vyšší zvýšení výkonu.
Testovací aplikace používaná ke generování obrázků v předchozí tabulce ukazuje typická vylepšení, která se nemusí v dané aplikaci vztahovat. Doporučujeme otestovat aplikaci, abyste zjistili, jestli sdružování a minifikace přináší vylepšenou dobu načítání.
Volba strategie sdružování a minifikace
ASP.NET Core je kompatibilní s WebOptimizerem, opensourcovým sdružováním a minifikačním řešením. Pokyny k nastavení a ukázkových projektů naleznete v tématu WebOptimizer. ASP.NET Core neposkytuje nativní řešení sdružování a minifikace.
Nástroje třetích stran, jako jsou Gulp a Webpack, poskytují automatizaci pracovních postupů pro sdružování a minifikace a také lintování a optimalizaci obrázků. Pomocí sdružování a minifikace se minifikované soubory vytvoří před nasazením aplikace. Sdružování a minifikace před nasazením poskytuje výhodu sníženého zatížení serveru. Je však důležité si uvědomit, že sdružování a minifikace zvyšují složitost sestavení a pracují pouze se statickými soubory.
Sdružování a minifikace založené na prostředí
Osvědčeným postupem je použití sbalených a minifikovaných souborů vaší aplikace v produkčním prostředí. Během vývoje usnadňují původní soubory ladění aplikace.
Pomocí pomocné rutiny značky prostředí v zobrazení určete, které soubory chcete do stránek zahrnout. Pomocník značky prostředí vykreslí jeho obsah pouze při spuštění v určitých prostředích.
Následující environment
značka vykreslí nezpracované soubory CSS při spuštění v Development
prostředí:
<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>
Následující environment
značka vykreslí sbalené a minifikované soubory CSS při spuštění v jiném prostředí než Development
. Například spuštěním v Production
těchto šablonách stylů nebo Staging
aktivací vykreslování těchto šablon stylů:
<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>