10

My understanding of JavaScript “compilation” is that it condenses and minifies your code to ultimately save bytes.

Does either condensing or minification make JavaScript run any faster?

Take the following examples for consideration:

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}

I ran these examples through jsPerf with little or no difference.

Can compilation of JavaScript make it any faster or slower, in addition to saving bytes?

Ry-
  • 218,210
  • 55
  • 464
  • 476
Blowsie
  • 40,239
  • 15
  • 88
  • 108

2 Answers2

17

Yes, compilation in the sense of the transforms applied by something like the Google Closure Compiler can make your script run faster. Consider this very simple example:

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

That compiles to:

var x="hello james";

Which is both less code and quicker to run. Obviously that's a silly example. I would hope you would write the compiled version yourself. However, it does demonstrate that Closure is capable of giving performance improvements as well as just file size improvements.

From the Closure docs (emphasis added):

The Closure Compiler is a tool for making JavaScript download and run faster. It is a true compiler for JavaScript. Instead of compiling from a source language to machine code, it compiles from JavaScript to better JavaScript.

Edit

For an example of the Closure compiler actually increasing the size of a JavaScript file in an attempt to offer performance improvements, see my answer to this question.

Community
  • 1
  • 1
James Allardice
  • 164,175
  • 21
  • 332
  • 312
  • I guess uncompiled javascript also has potential to use more `memory` vs compiled javascript? – Blowsie Nov 20 '12 at 13:12
  • @Blowsie - That's probably less likely, since the things you store in memory are unlikely to change as a result of the compilation (and things stored unnecessarily will be garbage collected anyway). But it is probably possible, yes. – James Allardice Nov 20 '12 at 13:15
  • 1
    So in fact it is not a compiler but a tool which refactors for performance. – Octavian Helm Nov 20 '12 at 13:19
  • 1
    @OctavianDamiean - Pretty much, yes. Although Google do call it "a true compiler for JavaScript" (although according to [Wikipedia](http://en.wikipedia.org/wiki/Compiler), this violates the definition of "compiler"). – James Allardice Nov 20 '12 at 13:20
  • 3
    @Blowsie Actually, the compiled javascript might take less memory. Google Closure Compiler often inlines functions, which means there is less stack used, thus less memory used. – Florian Margaine Nov 20 '12 at 13:24
1

Minified vs un-minified shouldn't make any difference in terms of execution speed. The only difference could be that minified version would be faster to parse, but even that when you have a very large file (you won't find any differences with the test you ran, it's just to small).

edit: the first statement I've made is valid if you are doing just the basic "minification". If you are using Closure compiler like James showed, then there could be some differences if the Clousure tools would optimize your code ...

Jan Hančič
  • 53,269
  • 16
  • 95
  • 99