2012-04-04 9 views
0

Ich habe eine JavaScript-Datei, die ich durch den Google Closure-Compiler lief, und es munged den Namen on zu za, die offensichtlich aus Sicht der Länge nicht effizienter ist. Gibt es einen Grund, warum es tatsächlich effizienter ist (möglicherweise aufgrund der verwendeten Buchstaben), oder sind es nur ein paar zufällige Buchstaben?Google Closure Munging Effizienz

Zum Beispiel kann ich mir vorstellen, dass za komprimierbar sein könnte als on wenn Gzipped, aber es gibt eine gute Chance, es ist nur ein paar zufällige Buchstaben.

+2

'on' ist tatsächlich wahrscheinlich sein kompressibler als' za' weil die Huffman-Kodierung Denn "z" könnte aufgrund seiner relativen Häufigkeit in der Standardsprache länger (mehr Bits) als die anderen Buchstaben sein. –

Antwort

3

Nach dem Spielen mit http://closure-compiler.appspot.com/home einige scheint es, dass der Compiler nur die Variable umbenennen unabhängig von ihrem vorherigen Namen. Es bleibt bei "a" und geht durch "b" usw. Es scheint sich nicht um die aktuelle Länge des Variablennamens zu kümmern, aber es stellt sicher, dass die Gesamtgröße gleich oder kleiner als zuvor ist. In einigen Fällen kann die Variable aus dem Code entfernt werden, wenn Sie die erweiterte Optimierungseinstellung verwenden.

Indem Sie zulassen, dass der Compiler die Benennung Ihrer Variablen handhabt, ist sicher, dass keiner von ihnen in Konflikt miteinander steht. Wenn es versucht hat, Ihren bestehenden Variablennamen beizubehalten, müsste er dies getrennt verfolgen und eine Liste führen, mit der verglichen werden kann.

Ein weiterer Vorteil des Code-Minimierung ist die Verschleierung Ihrer Code-Basis. Sicher kann jemand es herausfinden, wenn sie wirklich wollten, aber indem man die Variablennamen programmatisch macht, macht es schwerer, die Bedeutung herauszufinden.

Wenn Sie wirklich durch kombinierte & minified Code debuggen wollte ich würde empfehlen, sich in die Quelle Karten-Funktion von Google Chrome Canary http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

+0

Ja, es wählt Namen (aus dem Pool der verfügbaren Namen) basierend auf Größe und Häufigkeit. Je häufiger ein Name verwendet wird, desto kürzer ist der ihm zugewiesene Name. Lokale Variablen haben eine spezielle Handhabung, aber die Grundidee ist dieselbe. – John

1

Gibt es einen Grund, es ist in der Tat effiziente (möglicherweise wegen der Buchstaben verwendet)

Nr

oder ist es nur ein paar zufälligen Buchstaben?

Ziemlich viel. AFAIK, Closure Compiler (und andere JS-Minifier) ​​benennt systematisch Variablen um, mit dem Ziel, insgesamt weniger Zeichen zu verwenden, ohne auf das zu achten, was sie bereits genannt haben.

Verwandte Themen