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。
请教一下具体原因。
回复 (15)
D
弱弱的说一句,可能是在addText addNumber裡面省下了很多型別轉換的時間(?)
B
应该不是没执行循环,两个循环换个顺序 或者单独执行的话,结果任然如此。 应该是类型转换的问题,一个方法的类型判断应该有缓存,如果有种类型传入的话可能会破坏这种缓存,导致多次判断。
F
引用 dca弱弱的说一句,可能是在addText addNumber裡面省下了很多型別轉換的時間(?)
是的, 是 V8 内联缓存的问题!
F
XY 说的?
F
刚找到了原因,是因为 V8 引擎内联缓存的问题
F
B
以下是内存和时间的测试结果:
6788KB time运行前使用的内存
time1: 3336ms
9728KB time1 结束后使用的内存
time2: 221ms
9728KB time2 结束后使用的内存
签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3
F
@brighthas 这个内存是通过什么工具来获得的
G
guoliangchen@guoliangchen-N73SV:/桌面/node/example$ node add
time1: 1521ms
time2: 98ms
guoliangchen@guoliangchen-N73SV:/桌面/node/example$
这是我电脑上运行的时间!
G
这个好像在朴灵大大的博客里面有提到!!
P
引用 fsiaonma准确来说 是V8内联缓存问题
能否准确解释一下内联缓存造成这个问题的原因呢?
F
引用 fsiaonma准确来说 是V8内联缓存问题
@perterpon 我有时间写了一篇 bolg,你兴趣的可以参考一下 http://blog.sina.com.cn/s/blog_6801fe420101qaz2.html
F
F
准确来说 是V8内联缓存问题
P
引用 fsiaonma准确来说 是V8内联缓存问题
@fsiaonma 非常感谢。
参与回复
登录后即可参与回复。登录