2009-06-24 22 views
18

ich komprimieren meine eigene JS mit YuiCompressor, aber gibt es einen Grund, warum MicrosoftAjax.js nicht minimierte? Oder gibt es eine Einstellung zu sagen, die komprimierte Version davon auszuführen (wenn es eine komprimierte Version gibt). Oder muss ich es dekompilieren und die Skript-Ressource selbst minimieren?Gibt es einen Grund, warum MicrosoftAjax.js nicht minimiert wird?

+0

+1 Gute Frage! –

+0

Nun von den Antworten, die ich bekam, scheint es nicht zu sein, eine minimierte/komprimierte Version von MicrosoftAjax.js out of the box zu bekommen. Es sieht also so aus, als wäre DIY das Mittel der Wahl, wie ich in der Antwort erwähnt habe. Wie ich zu Josh erwähnt, können Sie in ASP.NET 3.5 jetzt Skripts http://msdn.microsoft.com/en-us/library/cc488552.aspx kombinieren. Wir sind noch nicht auf 3.5 migriert, aber wenn wir das tun, werde ich es überprüfen. Ich habe gemischte Kritiken darüber gelesen. Außerdem habe ich jQuery vor einer Weile dem Projekt hinzugefügt, so dass ich langsam alles jQuerifiziere, was jQuerifiziert werden kann. – nickytonline

+2

Mein Kommentar oben ist nicht mehr wahr. Dave Wards Antwort ist die gute, also keine DIY. – nickytonline

Antwort

23

ich diese irreführenden Antworten überrascht bin.

ASP.NET AJAX hat immer sowohl Debug- und komprimierte Versionen von MicrosoftAjax.js zur Verfügung gestellt. Eine Kombination aus der debug-Einstellung von web.config und ScriptManager's ScriptMode property steuert, auf welches Skript verwiesen wird.

Darüber hinaus können Sie the "retail" setting verwenden, um komprimierte Skripts unabhängig davon zu erzwingen.

+1

Danke für diesen Dave. Gut zu wissen. – nickytonline

+0

Brilliant, hatte ich keine Ahnung über die "Einzelhandel" -Einstellung, unser Unternehmen hat eine Angewohnheit, Sachen in der Produktion noch im Debug-Modus usw. zu implementieren. – Matt

-2

Ich kann nur annehmen, dass es zum besseren Verständnis, wie sie ist gelassen worden, und wie Sie bereits angedeutet haben, ich sehe Grund, warum Sie es selbst nicht komprimieren können, ist es nur JavaScript nachdem alle - Obwohl MS Vielleicht magst du es anders zu glauben, sie streuen es nicht mit magischen Feenstaub um es anders zu machen! :)

[Und seien wir ehrlich; MS haben nie Angst vor der Größe ihres Codes, haben sie?]

0

EDIT: In meiner Verteidigung, zum Zeitpunkt des Schreibens dieser Antwort hatte ich keine Erfahrung mit .NET 3.5; Ich weiß jetzt, dass sie in diesem Bereich einige dringend benötigte Verbesserungen vorgenommen haben.


Offenbar fühlt MS nicht, dass die Größe der JavaScript-Datei sehr wichtig ist (was verrückt ist). Basierend auf meiner Erfahrung mit MS Ajax injizieren sie außerdem mehrere SCRIPT-Tags (manchmal mehr als 10) in das Markup. Diese Tags enthalten Skripts von einem WebResource.axd-Handler. Also müssen zehn oder mehr Anfragen gemacht werden, nur um das nötige Javascript zu bekommen, um die Seite zu starten! Um der Lächerlichkeit noch etwas hinzuzufügen, fügen sie einen verrückten Abfrage-String in die Handler-URL ein, was wahrscheinlich verhindert, dass das Skript vom Browser zwischengespeichert wird.

Dieser Wahnsinn war Grund genug für mich MS Ajax vollständig zu Graben und wechseln Sie zu jQuery, die weit bessere Bibliothek ist, besonders seit Visual Studio now has Intellisense for jQuery.

+0

Wer hat diese Antwort abgelehnt und warum? –

+0

Nicht sicher, up vote von mir, weil ich Ihre Sicht auf ASP.NET Ajax teile. –

+0

Ich wurde auch abgelehnt - vielleicht haben wir einen MS-Mitarbeiter auf SO? :) Ich wünschte, down-Wähler würden erklären, warum sie so gewählt haben ... – CJM

1

Welche würden Sie lieber:

  1. MicrosoftAjax.js komprimiert kommt, schon verschleiert.
  2. MicrosoftAjax.js kommt unkomprimiert und offen, so dass Sie es selbst lesen und verstehen können.
+3

warum nicht beides? jQuery kommt in beiden, oder? –

+0

Während es trivial wäre, beide Versionen zu haben, und ziemlich nützlich, wenn Sie den einfachen Ausweg nehmen würden, sollten Sie die unkomprimierte Version bereitstellen. +1, weil dies kein Down-Voting verdient hat. – CJM

+0

@Neil N. Ich stimme zu, warum nicht beides? Verwenden Sie bei der Entwicklung unkomprimiert und in prod die verkleinerte/verschleierte Version. – nickytonline

3

Siehe http://www.codeproject.com/KB/aspnet/AspNetOptimizer.aspx, können Sie die

enableScriptMinification="true" 

Option benötigen und fügen Sie MicrosoftAjax.js zur Liste

+0

Ich habe diesen Artikel schon einmal gelesen, aber danke, dass du ihn hier geschrieben hast. Was ich suchte, war eine Out-of-the-Box-Lösung von Microsoft Ajax. Sieht aus wie DIY ist der Weg, um dies zu gehen. – nickytonline

7

Alle Skripte in System.Web.Extensions werden minimiert - es gibt zwei Versionen von jedem, wie Dave Wards ausgezeichnete Antwort darauf hinweist. ScriptManager verwendet standardmäßig die Debug-Version, wenn sich die web.config im Debug-Modus befindet. Drehe es um, um es mit der Einstellung für den Einzelhandel zu veröffentlichen, oder debugge = "false", und sieh dir dann das Skript an. Auch

diente Skripte durch WebResourceHandler oder ScriptResourceHandler sind in der Tat im Cache gespeichert.Sie werden auf die bestmögliche Weise zwischengespeichert - für immer, also brauchen sie nicht einmal bei zukünftigen Besuchen. Der Querystring ist so wie er ist, da er verschlüsselte Daten enthält. Es ist verschlüsselt, da es Informationen über die Skript-Ressource enthält, einschließlich eines Assemblynamens, und auch, weil es Cache-Flooding-Angriffe verhindert.

Nicht auf der Suche nach rep hier, wollte nur mehr Details geben.

+1

Gut zu wissen, die WebResourceHandler oder ScriptResourceHandler zwischengespeichert werden. Ich nehme also an, wenn Sie Änderungen vornehmen und erneut bereitstellen, werden diese erneut zwischengespeichert, aber als unterschiedliche Dateien, weil sich der verschlüsselte Querystring geändert hat? – nickytonline

+2

Yup. Jede Änderung an der Ressource ändert die Abfragezeichenfolge, was zu einem neu zwischengespeicherten Objekt führt. Auch habe ich nicht erwähnt, dass die Skripte auch gzip komprimiert sind. – InfinitiesLoop

Verwandte Themen