【发布时间】:2014-06-28 05:08:33
【问题描述】:
我正在玩基准测试,以查看我的自定义 javascript 占用了多少馅饼,而就优化而言,我无法控制的事情:dom/network/painting 等。
我会为此使用 chrome 的开发工具,但我看不到准确的饼图,因为我的函数执行 ajax 调用,因此网络被添加到饼图的 javascript 部分(以及 dom 和其他'out of我控制的东西)。
我正在使用 benchmarkjs (http://benchmarkjs.com/) 来测试这一行:
document.querySelector("#mydiv").innerHTML = template(data);
其中template 是预编译的车把模板。
关于问题...
我将这个过程分成了 3 个部分,并取了每次运行的平均值:
-
document.querySelector("#mydiv")- 0.00474178430265463 -
myDiv.innerHTML = already_called_template- 0.005627522903454419 -
template(data)- 0.004687963725254854
但是所有三个加在一起(上面的一行)结果是:0.005539341673858488
这比设置 innerHTML 的唯一调用要少。
那么为什么部分不等于总和?我做错了吗?
下面的示例基准(我使用 deferred 作为常量,因为我计划接下来添加 ajax):
var template = Handlebars.compile(html);
var showStats = function(e) { console.log(e.target.stats.mean); };
var cachedDiv = document.querySelector('#myDiv');
var cachedTemplate = template(data);
new Benchmark('just innerHTML', function(deferred) {
cachedDiv.innerHTML = cachedTemplate;
deferred.resolve();
}, {defer: true, onComplete: showStats}).run();
new Benchmark('full line', function(deferred) {
document.querySelector('#myDiv').innerHTML = template(users);
deferred.resolve();
}, {defer: true, onComplete: showStats}).run();
【问题讨论】:
-
你不是说不想测量 DOM 的东西吗?
-
嗨,Bergi,我希望能够分别测量 dom/network/customjs。我的目标是总结它们以了解总时间,但它并没有完全加起来......
标签: javascript performance optimization benchmarking