Kann ein Minifier das tun? (... und ist es eine gute Idee?)

8

Ich habe eine JavaScript-Anwendung, die eine beträchtliche Anzahl von DOM-Elementen generiert. Es bedeutet, dass ich oft document.createElement("tagname") in meinem Skript verwende.

Ich denke über die Verwendung dieser einfachen Funktion nach:

%Vor%

Ich würde weiterhin meinen Code in JavaScript (oder vielleicht CoffeScript) schreiben und die vollständige document.createElement-Methode im Code zur besseren Lesbarkeit verwenden. Aber ich würde erwarten, dass beim Kompilieren oder Minimieren des Codes alle Instanzen von document.createElement durch die Funktion c ersetzt werden.

Ich würde das gleiche für andere Methoden tun: document.getElementById, etc. Ich hoffe, dass ich meinen Code mit dieser Technik um 10 bis 20% verkürzen kann.

Gibt es Minifier oder Compiler, die das können? Und macht es überhaupt Sinn?

    
Christophe 29.11.2011, 20:43
quelle

5 Antworten

3

Ich glaube nicht, dass es dir so viel bringen wird. Die unkomprimierte js-Datei ist vielleicht ein wenig kleiner, aber die Komprimierung sollte sich mit einer solchen sich wiederholenden Zeichenkette befassen. Also erwarte ich, dass der Gewinn einer komprimierten Javascript-Datei (http gzip compression) eher gering ist.

    
CodesInChaos 29.11.2011, 20:50
quelle
1

Ich rufe nur die Funktion create(e) anstelle von c(e) auf. Auf diese Weise erhalten Sie das Beste aus beiden Welten, Lesbarkeit und Sie müssen nicht so viel tippen.

    
Bjørn Kjos-Hanssen 29.11.2011 21:30
quelle
0

Die meisten Minifiers werden die DOM-Bibliotheksfunktionen nicht mit kürzeren Versionen neu definieren. Sie sehen dieses Muster jedoch in vielen Bibliotheken von Hand, um den Code zu reduzieren und / oder zu vereinfachen. Es ist also nichts falsch daran, dies selbst zu tun. Stellen Sie nur sicher, dass Sie es in einem Verschluss tun ....

Sehen Sie sich die Optionen für uglifier an und sehen Sie, was es für Sie tun kann, zum Beispiel:

%Vor%     
maxl0rd 29.11.2011 20:50
quelle
0

Es macht Sinn, aber ein Minifier, der das automatisch macht, muss über einige Dinge clever sein:

  1. Wiederholt sich der Teil des Codes, der in eine neue Funktion umgewandelt wird, oft genug, um dieses Refactoring wirtschaftlicher zu gestalten?
  2. Potenzieller Leistungseinbruch durch das Einschließen von Code in zusätzliche Funktionen: Besonders wenn Code sehr häufig in einem zeitkritischen Szenario verwendet wird (ein Profiler kann dies erkennen, ein Minifier kann das wahrscheinlich nicht). Vielleicht kann der Minifier die Anzahl der Ersetzungen in tief verschachtelten Funktionsaufrufen usw. begrenzen.

Sie tun das wahrscheinlich besser manuell.

    
Ates Goral 29.11.2011 20:52
quelle
0

Es hängt vollständig vom Minifier ab. Die meisten tun das nicht. Zum Beispiel der Code:

%Vor%

Im erweiterten Modus von Google Closure Compiler:

%Vor%

Auf YUI-Kompressor:

%Vor%

Auf jscompress.com:

%Vor%

Ich stelle mir vor, dass Compiler im Falle von seltsamen Nebeneffekten die Alias-DOM-Methoden nur widerwillig verwenden, und auch wiederholte Strings in der js werden sowieso von gzip gut komprimiert.

    
Simon Sarris 29.11.2011 20:54
quelle

Tags und Links