Underscore templates - classic vs. precompiled

JavaScript performance comparison

Revision 2 of this test case created

Info

Benchmarking difference in performance of rendering simple Underscore template - classic vs. precompiled

Preparation code

<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/1.0.0-rc.2/lodash.min.js"></script>

<script>
  var lodash = _.noConflict();
</script>
 
<script>
Benchmark.prototype.setup = function() {
    var _ = window.lodash;
   
    var template = '<div class="item <%= id %>">' +
                   '  <h1><%= title %></h1>' +
                   '  <p><%= desc %></p>' +
                   '  <ul class="attributes">' +
                   '    <li><%= attrs.dimensions %></li>' +
                   '    <li><%= attrs.weight %></li>' +
                   '    <li><%= attrs.price %></li>' +
                   '  </ul>' +
                   '</div>';
   
    var templateFuncPrecompiled = eval("(" + _.template(template).source + ")");
   
    function temp(id,title,desc,dimensions,weight,price){
    var template = '<div class="item'+id+'">\
    <h1>'
+title+'</h1>\
    <p>'
+desc+'</p>\
    <ul class="attributes">\
    <li>'
+dimensions+'</li>\
    <li>'
+weight+'</li>\
    <li>'
+price+'</li>\
    </ul>\
    </div>'
;
    return template ;
    }
};
</script>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
classic
var templateFunc = _.template(template);  // compile template
var output = templateFunc({               // render template
  id: 5,
  title : 'Hello World!',
  desc  : 'Ordianry item',
  attrs : {
    dimensions : '100cm x 100cm x 20cm',
    weight     : '15kg',
    price      : '10EUR'
  }
});
pending…
precompiled
var output = templateFuncPrecompiled({  // render template
  id: 5,
  title : 'Hello World!',
  desc  : 'Ordianry item',
  attrs : {
    dimensions : '100cm x 100cm x 20cm',
    weight     : '15kg',
    price      : '10EUR'
  }
});
pending…
JS only
temp(5,'Hello World!','Ordianry item', '100cm x 100cm x 20cm','15kg','10EUR');
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment