文章目錄
- 情境1:No escape
- 情境2:All escape
瀏覽器版可直接查看: JavaScript template language shootoff
運行效能測試
測試代碼在:https://github.com/fengmk2/mk2blog/tree/master/2011/4/js-template-benchmarks
$ node benchmarks.js
我的測試環境
CPU: 4核 Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz
Memory: 4GB
OS: Ubuntu 10.10 2.6.35-28-generic-pae i686
我的測試結果
escape延後處理是需要效能代價的。但是這樣可以減少業務複雜性。
情境1:No escape
渲染10萬次,最快的是doU, doT, nTenjin(基於tenjin的最佳化版本), jst_speed;最慢的是tenjin和jade
doT已經達到百萬次層級了,好神速啊!
!!!新增@shaunlee 的中國第一速度模板引擎: jst,
@shaunlee看見第一次測試結果後非常不滿意,經過最佳化後,速度已經達到第一梯隊了!
No escape, render 100000 times:doT running...use: 0.066 sec, rps: 1515151.5151515151--------------------------------------------doU running...use: 0.064 sec, rps: 1562500--------------------------------------------nTenjin running...use: 0.069 sec, rps: 1449275.3623188403--------------------------------------------jqtpl running...use: 2.059 sec, rps: 48567.26566294317--------------------------------------------ejs running...use: 1.514 sec, rps: 66050.19815059446--------------------------------------------haml running...use: 9.532 sec, rps: 10490.97775912715--------------------------------------------jade running...use: 10.592 sec, rps: 9441.087613293052--------------------------------------------jst running...use: 2.089 sec, rps: 47869.79415988511--------------------------------------------jst_speed running...use: 0.065 sec, rps: 1538461.5384615385--------------------------------------------
情境2:All escape
效能馬上變成浮雲了。
速度高低排名: jst(果然是第一速度), nTenjin, jqtpl, ejs, doT, doU, haml, jade
對比情境1,可看到doT和doU的escape效能非常差。
All escape, render 100000 times:doT running...use: 3.921 sec, rps: 25503.698036215254--------------------------------------------doU running...use: 3.926 sec, rps: 25471.217524197655--------------------------------------------nTenjin running...use: 1.306 sec, rps: 76569.67840735069--------------------------------------------jqtpl running...use: 3.012 sec, rps: 33200.531208499335--------------------------------------------ejs running...use: 3.539 sec, rps: 28256.569652444192--------------------------------------------haml running...use: 11.098 sec, rps: 9010.632546404757--------------------------------------------jade running...use: 12.676 sec, rps: 7888.9239507731145--------------------------------------------jst running...use: 4.004 sec, rps: 24975.02497502498--------------------------------------------jst_speed running...use: 1.167 sec, rps: 85689.8029134533--------------------------------------------
從tenjin到nTenjin的幾點效能最佳化方法
原文: https://github.com/QLeelulu/nTenjin/blob/master/README.md
- jsTenjin是使用eval來解析的,而nTenjin是使用 new Function 來解析的(速度差別之一)。
- jsTenjin是使用Array.push來構造字串的,而nTenjin是使用 String += str 來構造字串的(速度差別之二)。
- nTenjin中變數必須由it來指定,例如#{param}要修改為#{it.param},其他和jsTenjin完全一致。
模板引擎最佳化步驟
- 使用new Function 解析;
- 直接字元從相加 str += s;
- 變數不切換上下文,直接it指定
- 高效能的escape