javascript - 标杆管理:部分加起来不等于整体

标签 javascript performance optimization benchmarking

我正在尝试基准测试,以了解我的自定义 javascript 占用了多少份额,以及就优化而言超出我控制范围的内容:dom/network/painting 等。

我会为此使用 chrome 的开发工具,但我没有看到准确的饼图,因为我的函数执行 ajax 调用,因此网络被添加到饼图的 javascript 部分(以及 dom 和其他“out of”)我控制的东西)。

我正在使用 benchmarkjs ( http://benchmarkjs.com/ ) 来测试这一行: document.querySelector("#mydiv").innerHTML = template(data);

其中template是预编译的 Handlebars 模板。

对于这个问题...

我将这个过程分为 3 个部分,并取每次运行的平均值:

  1. document.querySelector("#mydiv") - 0.00474178430265463
  2. myDiv.innerHTML =已经_叫_模板 - 0.005627522903454419
  3. 模板(数据) - 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();

最佳答案

http://mrale.ph/blog/2012/12/15/microbenchmarks-fairy-tale.html

事实证明,jit 可能正在做一些疯狂的事情。

答案是尝试智取它,但我认为我应该调整我的策略。

关于javascript - 标杆管理:部分加起来不等于整体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397003/

相关文章:

time - JavaScript 日期构造函数和时区

javascript - 在 JavaScript 中获取一周中的日期

c# - 如何提高 HttpWebResponse 的性能?

matlab - 快速定位排序向量中的位置

c++ - 优化此递归函数[Boggle解析器]

javascript - 如何仅更改 html 表格中最小单元格的颜色

javascript - 如何使用 jquery 或 javascript 重新定位 JSON 中对象的键

c# - 提高游戏性能 C#

python - 在 Python 中展平任意嵌套列表的最快方法是什么?

c - 是否仍然值得尝试在 C 中为 sqrt() 创建优化?