2012-11-20 2 views
9

Mein Verständnis von JavaScript "Kompilierung" besteht darin, dass es Ihren Code verdichtet und minimiert, um letztendlich Byte zu speichern.Verlangsamtes/kompiliertes JavaScript im Vergleich zu unkomprimiertem JavaScript in Bezug auf die Leistung

Führt das Kondensieren oder Verkleinern dazu, dass JavaScript schneller läuft?

Nehmen Sie die folgenden Beispiele zur Prüfung:

var abcdefghijklmnopqrstuvwxyz = 1; 
// vs. 
var a=1; 
var b = function() { 
    // Here is a comment 
    // And another 
                                 // White space 
    return true; 
}; 

// vs. 

var b=function(){return true} 

Ich lief diese Beispiele durch jsPerf with little or no difference.

Kann die Kompilierung von JavaScript es zusätzlich zu dem Speichern von Bytes schneller oder langsamer machen?

+5

Worauf Sie sich beziehen, ist in keiner Weise eine Kompilierung. Ich würde vorschlagen, dass Sie Ihre Frage bearbeiten. –

+0

Also, wenn ich meine JS durch Google Closure-Compiler läuft, ist es in keiner Weise kompiliert? https://developers.google.com/closure/compiler/ – Blowsie

+0

JavaScript ist Javascript. Die js-Engine kann optional Javascript kompilieren, aber es ist in keiner Weise kompiliert. Jeder Leistungsvorteil wird entweder durch Code-Neuschreiben verursacht oder ist vernachlässigbar (wie in Ihrem Beispiel). – Zirak

Antwort

16

Ja, Kompilierung im Sinne der Transformationen, die von etwas wie der Google Closure Compiler angewendet werden, kann Ihr Skript schneller laufen lassen. Betrachten Sie diese sehr einfaches Beispiel:

var x = ["hello", "james"].join(" "); 

Das kompiliert:

var x="hello james"; 

die sowohl weniger Code und schneller zu laufen. Offensichtlich ist das ein dummes Beispiel. Ich würde hoffen, dass Sie die kompilierte Version selbst schreiben würden. Es zeigt jedoch, dass Closure Leistungsverbesserungen und nur Dateigrößenverbesserungen ermöglicht.

aus der Schließung docs (Hervorhebung hinzugefügt):

Der Closure Compiler ist ein Werkzeug zur Herstellung von JavaScript herunterladen und schneller laufen. Es ist ein echter Compiler für JavaScript. Anstatt von einer Quellsprache zu einem Maschinencode zu kompilieren, kompiliert es von JavaScript zu besserem JavaScript.

bearbeiten

Ein Beispiel des Closure Compiler bieten Leistungsverbesserungen tatsächlich die Größe eine JavaScript-Datei in einem Versuch zu erhöhen, siehe meine Antwort auf this question.

+0

Ich denke, kompilierte Javascript hat auch Potenzial, mehr "Speicher" vs kompiliertes Javascript zu verwenden? – Blowsie

+0

@Blowsie - Das ist wahrscheinlich weniger wahrscheinlich, da die Dinge, die Sie im Speicher speichern, sich als Ergebnis der Kompilierung kaum ändern werden (und Dinge, die unnötigerweise gespeichert werden, werden ohnehin Müll gesammelt). Aber es ist wahrscheinlich möglich, ja. –

+1

Also in Wirklichkeit ist es kein Compiler, sondern ein Werkzeug, das für die Leistung umgestaltet. –

1

Minified vs un-minified sollte keinen Unterschied in der Ausführungsgeschwindigkeit machen. Der einzige Unterschied könnte sein, dass eine verkleinerte Version schneller zu parsen wäre, aber selbst wenn Sie eine sehr große Datei haben (Sie werden keine Unterschiede mit dem Test finden, den Sie ausgeführt haben, es ist nur zu klein).

edit: die erste Aussage, die ich gemacht habe, ist gültig, wenn Sie nur die grundlegende "Minification" tun. Wenn Sie den Closure-Compiler wie James verwenden, könnte es einige Unterschiede geben, wenn die Clousure-Tools Ihren Code optimieren würden ...