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.
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:
<script>
tag am Ende der Seite, um eine größere Download-Parallelisierung zu erreichen. Ссылка
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: Ссылка
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.
Tags und Links jquery google-closure-compiler minify