Verwenden Sie den Abschlusscompiler, um nicht verwendete Teile von jQuery zu entfernen

8

Ist es möglich, den Closing-Compiler zu verwenden, um nicht verwendete Teile von jQuery zu entfernen?

Ich habe ein Skript, das nur die jQuery-Netzwerkfunktionen (json) verwendet, und ich möchte ein minimiertes Skript, das alles andere entfernt.

Ich habe versucht, es mit aufzurufen:

%Vor%

Aber ich habe am Ende eine Datei, die nicht kleiner als die reguläre minimierte jQuery-Quelle ist.

Edit: Ich sollte den Grund dafür erwähnen. Dieses Skript wird in Websites von Drittanbietern enthalten sein und erfordert eine spätere Version von jQuery (1.5 oder 1.6). Ich dachte, der einfachste Weg, dies zu bewältigen, bestand darin, die neueste Version innerhalb des Skripts zu bündeln (nur verfügbar für mein Skript, nicht berühren window.jQuery), unbenutzte Teile zu entfernen, um die Größe zu reduzieren. Auf diese Weise, wenn sie bereits eine ältere Version von jQuery hätten, würde das nicht stören.

    
John Smith 13.05.2011, 14:01
quelle

4 Antworten

5

Es ist nicht möglich, "unbenutzte" Methoden in jQuery zu entfernen, da Sie Methoden auf verrückte Weise aufrufen können wie:

%Vor%

Der Closing-Compiler kann möglicherweise nicht wissen, welche Methoden verwendet werden oder nicht.

Geige: Ссылка

Wie einige Seitennotizen:

  • Die neueste Produktionsversion von jQuery (1.6) ist nur 31kb groß. Bei ordnungsgemäßer Caching-Kontrolle wird diese einmal heruntergeladen und lokal vom Browser zwischengespeichert.
  • Sie werden sich wahrscheinlich einen Gefallen tun, Dinge zu optimieren, die in der Regel viel größer sind, zum Beispiel Bilder.
  • ... oder weniger Browseranfragen, wie zum Beispiel die CSS-Sprite-Technik, um Ihre Website besser zu optimieren.
  • Platzieren Sie Ihren jQuery-Code <script> tag am Ende der Seite, um eine größere Download-Parallelisierung zu erreichen. Ссылка
Gary Green 13.05.2011 14:11
quelle
4

Zunächst benötigen Sie für den toten Code den erweiterten Modus. Ich sehe, dass Sie es bereits verwenden.

Zweitens muss Ihr Code so geschrieben werden, dass er den strengen Einschränkungen des erweiterten Modus entspricht. Ich nehme an, dass Sie das getan haben und Ihren Code gründlich überprüft haben - andernfalls wird der kompilierte Code nicht funktionieren.

Dann müssen Sie auf die jQuery "externs" -Datei verweisen - Sie können diese von der Closure Compiler-Website erhalten. Ohne diese externe Datei wird Closure Eigenschaften und Funktionen in jQuery umbenennen, die es nicht sollte.

Schließlich ist jQuery nicht für die Arbeit mit dem erweiterten Modus des Closure Compilers geschrieben. Es gibt viele Orte, an denen es "Aliase" erzeugt, die nicht weg optimiert werden können. Mit nur einem Alias ​​irgendwo innerhalb der Codebasis wird das gesamte jQuery-Objekt und alles darunter hineingezogen.

Kurze Antwort: Ohne viel Arbeit ist es nicht möglich, den erweiterten Modus des Closure Compilers mit jQuery für die Entfernung von toten Codes zu verwenden.

Off-Topic: Das Dojo-Toolkit ist bisher die einzige bekannte JavaScript-Bibliothek (außer der Closure Library), die mit dem Closure-Compiler im erweiterten Modus verwendet werden kann. Alle erweiterten Funktionen des Closure Compilers (z. B. Entfernung von toten Codes, Virtualisierung von Methoden, Namespace-Glättung usw.) werden unterstützt.

Überprüfen Sie diesen Link für ein TODO-Dokument: Ссылка

    
Stephen Chung 14.05.2011 09:15
quelle
1

Es gibt viele Gründe, warum der Compiler nichts mit der jQuery-Bibliothek anfangen wird, beginnend mit dem jQuery-Export selbst:

window.jQuery = jQuery

Im erweiterten Modus wird dieses Idiom verwendet, um dem Compiler mitzuteilen, dass ein Wert extern zum Skript verwendet wird. Daher wird das Objekt selbst nie entfernt, die Namenhierarchien werden nicht geschlossen usw.

Wenn Sie dies entfernen, bettete sich jQuery selbst in einen anonymen Funktionsfunktionswrapper ein, der viele der globalen Bereichsoptimierung des ADVANCED-Modus verhindert (Namenshierarchien, Klassenerkennung für Typanalysen usw.).

Es ändert sich nicht viel, wenn Sie dies entfernen, aber ich habe nicht nach dem nächsten Problem gesucht.

    
John 13.05.2011 16:28
quelle
-1

Probieren Sie stattdessen ender .

Die Philosophie besteht aus einer Kombination von Mikro-Frameworks. Brauche kein Feature, dann baue es nicht in Ender.

Wenn Sie nur Ajax benötigen, fügen Sie das Ajax-Modul zu Ihrem Ender-Build hinzu.

    
Raynos 13.05.2011 14:42
quelle