function add(x, y) {
return x + y;
}
console.time("time1");
for (var i = 0; i < 90000000; ++i) {
add(1, 2);
add('a','b');
}
console.timeEnd("time1");
function addText(x, y) {
return x + y;
}
function addNumber(x, y) {
return x + y;
}
console.time("time2");
for (var i = 0; i < 90000000; ++i) {
addNumber(1, 2);
addText('a','b');
}
console.timeEnd("time2");
这段代码在 V8 上的运行结果为: time1: 1481ms, time2: 102ms。
请教一下具体原因。
弱弱的说一句,可能是在addText addNumber裡面省下了很多型別轉換的時間(?)
应该不是没执行循环,两个循环换个顺序 或者单独执行的话,结果任然如此。 应该是类型转换的问题,一个方法的类型判断应该有缓存,如果有种类型传入的话可能会破坏这种缓存,导致多次判断。
是的, 是 V8 内联缓存的问题!
XY 说的?
刚找到了原因,是因为 V8 引擎内联缓存的问题
没错,就是这个原因!
以下是内存和时间的测试结果:
6788KB time运行前使用的内存
time1: 3336ms
9728KB time1 结束后使用的内存
time2: 221ms
9728KB time2 结束后使用的内存
签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3
@brighthas 这个内存是通过什么工具来获得的
准确来说 是V8内联缓存问题
guoliangchen@guoliangchen-N73SV:~/桌面/node/example$ node add time1: 1521ms time2: 98ms guoliangchen@guoliangchen-N73SV:~/桌面/node/example$ 这是我电脑上运行的时间!
这个好像在朴灵大大的博客里面有提到!!
能否准确解释一下内联缓存造成这个问题的原因呢?
@perterpon 我有时间写了一篇 bolg,你兴趣的可以参考一下 http://blog.sina.com.cn/s/blog_6801fe420101qaz2.html
有链接吗
@fsiaonma 非常感谢。