Verketten und reduzieren Sie JavaScript während der Installation ODER zur Laufzeit - ASP.NET MVC
Als Erweiterung dieser Frage hier Verknüpfung von JavaScript-Bibliotheken in den Benutzer-Steuerelemente ich war nach einige Beispiele, wie Menschen verketten und minifying von JavaScript on-the-fly ODER mit dem build. Ich würde auch gern sehen, wie es arbeitet dann in Ihrem master-Seiten.
Ich nicht Verstand Seite bestimmte Dateien minified und verknüpft inidividually, wie Sie derzeit sind (siehe unten) aber alle JavaScript-Dateien auf der main-master-Seite (habe ich über 5 oder 6) ich möchte verkettet und minified.
Bonus-Punkte für jeden, der beinhaltet auch CSS-Verkettung und Verkleinerung! 🙂
Aktuellen master-Seite mit den gängigen JavaScript-Dateien, die ich möchte, verkettet und minified:
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<head runat="server">
... BLAH ...
<asp:ContentPlaceHolder ID="AdditionalHead" runat="server" />
... BLAH ...
<%= Html.CSSBlock("/styles/site.css") %>
<%= Html.CSSBlock("/styles/jquery-ui-1.7.1.css") %>
<%= Html.CSSBlock("/styles/jquery.lightbox-0.5.css") %>
<%= Html.CSSBlock("/styles/ie6.css", 6) %>
<%= Html.CSSBlock("/styles/ie7.css", 7) %>
<asp:ContentPlaceHolder ID="AdditionalCSS" runat="server" />
</head>
<body>
... BLAH ...
<%= Html.JSBlock("/scripts/jquery-1.3.2.js", "/scripts/jquery-1.3.2.min.js") %>
<%= Html.JSBlock("/scripts/jquery-ui-1.7.1.js", "/scripts/jquery-ui-1.7.1.min.js") %>
<%= Html.JSBlock("/scripts/jquery.validate.js", "/scripts/jquery.validate.min.js") %>
<%= Html.JSBlock("/scripts/jquery.lightbox-0.5.js", "/scripts/jquery.lightbox-0.5.min.js") %>
<%= Html.JSBlock("/scripts/global.js", "/scripts/global.min.js") %>
<asp:ContentPlaceHolder ID="AdditionalJS" runat="server" />
</body>
Eingesetzt in eine Seite wie diese (die ich gerne mit):
<asp:Content ID="signUpContent" ContentPlaceHolderID="AdditionalJS" runat="server">
<%= Html.JSBlock("/scripts/pages/account.signup.js", "/scripts/pages/account.signup.min.js") %>
</asp:Content>
UPDATE: Empfehlungen für die jetzt (Ende 2013):
Ich würde bei Microsoft ASP.NET's gebaut in Bündelung und Verkleinerung.
Ente Nüsse
bedeutet es gut oder schlecht ist? InformationsquelleAutor der Frage Charlino | 2009-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Anhang Professionelle ASP.NET 3.5 Scott Hanselman spricht über Packer für .NET. Dadurch wird die Integration mit MSBuild und pack javascript-Dateien für den Praxiseinsatz etc.
InformationsquelleAutor der Antwort RedWolves
Versuchen Sie dies:
Ich habe vor kurzem ein gutes Stück von Forschung und konsequente Entwicklung auf der Arbeit, geht ganz schön weit zu verbessern, die Leistung unserer web-Anwendung front-end. Ich dachte, ich würde teilen die einfache Lösung hier.
Die erste offensichtliche Sache zu tun ist, vergleichen Sie Ihre Website mit Yahoo YSlow und Google PageSpeed. Diese zeigen die "low-hanging fruit" performance-Verbesserungen zu machen. Es sei denn, Sie das bereits getan haben, die daraus resultierenden Vorschläge werden sicherlich kombinieren, minifying und Gzip Ihrer statischen Inhalte.
Die Schritte, die wir durchführen, sind:
Schreiben Sie eine benutzerdefinierte HTTPHandler zu kombinieren und minifizieren von CSS.
Schreiben Sie einen benutzerdefinierten HTTPHandler zu kombinieren und minifizieren JS.
Einen Mechanismus beinhalten, um sicherzustellen, dass die oben tun nur Ihre Magie, wenn die Anwendung nicht im debug-Modus.
Schreiben Sie eine benutzerdefinierte server-Seite web-Steuerung für die einfache Pflege von css - /js-Datei Einbindung.
Aktivieren Sie die GZIP-von bestimmten Inhaltstypen, die auf IIS 6.
Richtige, beginnen wir mit CSSHandler.asax implementiert .NET IHttpHandler-Schnittstelle:
Ok, nun einige Erläuterungen:
IsReUsable-Eigenschaft hinzu:
Sind wir nicht mit etwas befasse, Instanz-spezifisch, was bedeutet, können wir sicher die Wiederverwendung der gleichen Instanz des handlers, der sich mit mehreren Anfragen, weil unsere ProcessRequest threadsicher ist. Mehr info.
ProcessRequest-Methode:
Nichts zu hektisch hier Los ist. Wir sind die Schleife durch CSS-Dateien gegeben, die uns (siehe CSSControl unten, wie Sie kommen) und dann wird jeder, mit einem .NETZ-Hafen von Yahoo YUICompressor, bevor Sie den Inhalt hinzufügen, um die ausgehende Antwort stream.
Den Rest der Methode beschäftigt sich mit dem einrichten einige HTTP-caching-Eigenschaften weiter zu optimieren die Art und Weise der browser-client-downloads (oder auch nicht, wie der Fall sein kann) Inhalte.
Setzen wir Etags im code, so dass Sie können die gleichen für alle Computer in unsere server-farm.
Wir setzen Antwort und Cache-Abhängigkeiten auf unsere eigentlichen Dateien so ist, sollte Sie ersetzt werden, cache ungültig erklärt werden.
Wir setzen Cachefähigkeit, so dass proxies, Zwischenspeichern können.
Wir VaryByParams-mit unserem cssfiles-Attribut, so dass wir-cache pro CSS-Gruppe Datei übermittelt durch die handler.
Und hier ist die CSSControl, eine benutzerdefinierte server-Seite Steuern, erbt das .NET LiteralControl.
Front:
Zurück:
HttpContext.Aktuelle.IsDebuggingEnabled angeschlossen ist, um die folgende Einstellung in Ihrem web.config:
Also, im Grunde, wenn Ihre Website ist im debug-Modus erhalten Sie HTML-markup wie dieses:
Aber wenn Sie im Produktions-Modus (debug=false), erhalten Sie markup wie dieses:
Letzteres wird dann offensichtlich, rufen die CSSHandler, die Pflege der Verbindung, minifying und cache-bereitet Ihre statischen CSS-Dateien.
Alle der oben genannten können dann auch dupliziert werden für die statische JavaScript-Inhalte:
`JSHandler.ashx:
Und seiner begleitenden JSControl:
Front:
Zurück:
Aktivieren von GZIP:
Als Jeff Atwood sagt, die Aktivierung der Gzip-auf Ihrer Website-server ist ein no-brainer. Nach einigen tracing, habe ich beschlossen, aktivieren Sie Gzip auf folgende Datei-Typen:
.css
.js
.axd (Microsoft Javascript-Dateien)
.aspx (Übliche ASP.NET Web-Formulare Inhalt)
.ashx (Unsere Handler)
Zum aktivieren der HTTP-Komprimierung auf dem IIS 6.0 web server:
Öffnen Sie den IIS -, Rechts-klicken Sie auf Web-Seiten, Registerkarte Dienste, aktivieren Sie Komprimieren Dateien der Anwendung und Komprimieren von Statischen Dateien
Beenden von IIS
Öffnen Sie IIS-Metabasis in Notepad (C:\WINDOWS\system32\inetsrv\MetaBase.xml) – und ein back-up, wenn Sie nervös sind, über diese Dinge
Suchen und überschreiben die beiden IIsCompressionScheme und eine IIsCompressionSchemes-Elemente mit dem folgenden:
Und das ist es! Das ersparte uns haufenweise Bandbreite und resultierte in einer mehr responsive web-Anwendung im gesamten.
Genießen!
InformationsquelleAutor der Antwort Mark Gibaud
Warum nicht mit den ScriptManager? Hier ist ein MVCScriptManager kombiniert werden UND quetschen.
InformationsquelleAutor der Antwort Scott Hanselman
Entweder YUI Compressor oder Dojo Kompressor. Sie verwenden beide die Rhino-JS parsing-engine, die tokenizes Ihren code, und wird daher nur funktionieren, wenn der code gültig ist der code. Wenn es ist ein Fehler, Sie ' ll lassen Sie wissen, (das ist ein netter bonus IMO!) Packer auf der anderen Seite, pack deinen code, selbst wenn es Fehler enthält.
Benutze ich YUI in allen meinen Projekten über build-Skripte. Nie tun Sie es auf der fliege, es dauert zu lange, um zu tun, ist die Kompression. Sowohl YUI und Dojo sind Java-basiert (ala Rhino) und wenn man es auf die Fliegen, werden Sie laichen hintergrund-Prozesse, um die Ausgabe zu generieren - nicht gut für die Leistung. Immer tun Sie es mit dem build.
InformationsquelleAutor der Antwort Bryan Migliorisi
Rejuicer ist eine tolle neue minifier für ASP.NET das ist immer eine Menge buzz:
http://rejuice.me
Ist es so konfiguriert, wie ein HTTP-Modul & führt die Verkleinerung auf die run-time (einmal) und speichert die Ausgabe.
:
Konfiguration (gemacht ApplicationStart in global.asax.cs ist ganz einfach:
InformationsquelleAutor der Antwort Sam
Hier ist, was ich verwendet habe, für die Verkettung, Kompression und caching für CSS-und JS-Dateien:
http://gist.github.com/130913
Es erfordert nur Yahoo.Yui.Compressor.dll in das bin-Verzeichnis. Es spielt keine Kompresse zur compile-Zeit, aber die Dateien sind Cache-Datei mit den Abhängigkeiten, so sind Sie nur einmal geladen, wenn Sie geändert.
Dann ich fügen Sie einfach diesen code in den <head>:
- und dies gerade vor dem </body>:
Es wurde entwickelt, um die Arbeit mit mehreren Dateien, die alle in den gleichen Pfad, aber könnte leicht aktualisiert werden, um Unterstützung für verschiedene Pfade.
InformationsquelleAutor der Antwort travis
Verwende ich eine angepasste Lösung auf Basis von MSBuild und der Microsoft Ajax Minifier. Viel des vorhandenen blog Beiträge dort nicht richtig behandeln bestimmte Fälle wie die integration mit TFS-build.
Für jedes web-Projekt, erstellen wir eine "wpp.Ziele" - Datei zu erweitern, die Web-Publishing-Pipeline. Zum Beispiel, wenn das Projekt "Website.csproj" erstellen Sie eine Datei namens "Website.wpp.Ziele" in das Projekt.
Platzieren Sie den folgenden code in die targets-Datei:
"'$('Konfiguration') = = 'Release' - " - Bedingung auf die minifizierung Ziel kann geändert werden, je nach Ihren Bedürfnissen. Es wird automatisch zu minifizieren (und zu validieren) alle CSS-und JS-Dateien in das Projekt, wenn publishing, Verpackung, und Gebäude auf dem server.
Die Sie benötigen, um die WPP "CopyWebApplication" Ziel für den server baut. Um dies zu tun, legen Sie die MSBuild-Eigenschaft UseWP_CopyWebApplication zu Wahren, und PipelineDependsOnBuild auf False. Wir setzen diese in die Projekt-Datei, bevor die web-Anwendung zielt Datei enthalten ist.
InformationsquelleAutor der Antwort ShadowChaser
Ich würde empfehlen, http://www.RequestReduce.com minimiert und kombiniert die css-und javascript-sowie css-sprites hintergrund-Bilder und optimiert die PNG-Komprimierung. Dies alles geschieht zur Laufzeit und speichert die Ausgabe. Es erfordert keine code oder Konfiguration über das hinzufügen der HttpModule. Es dient alle zwischengespeicherten Inhalte mit optimierten Fernen Zukunft headers und ETags, um sicherzustellen, dass der Browser-cache der css - /javascript - /sprites so lange wie möglich. Während es erfordert keine Konfiguration, es ist in hohem Maße konfigurierbar und kann so eingerichtet werden, laufen mit einem CDN und sync-Cache-Dateien auf einer web-farm.
Alle javascript, Bilder und css abgerufen werden über HTTP, so dass auch css und js von Dritten und es ist auch ein großartiger Weg, um zu verkleinern/zu kombinieren .axd Ressourcen wie WebResource.axd und ScriptResource.axd. Es bestimmt die Mitwirkung von js und css über content-type, so dass das Ziel-Ressource kann eine beliebige (oder keine) Erweiterung. Es läuft auf jedem IIS-basierte Technologie, einschließlich aller Versionen und Sicht-Motoren von MVC, web forms und "web-Seiten".
Können Sie herunterladen von http://www.RequestReduce.com, Nuget oder Gabel aus https://github.com/mwrock/RequestReduce.
InformationsquelleAutor der Antwort Matt Wrock