跳到主要内容
CNode

请教一V8上的js问题

社区
Ffsiaonma发布于 13 年前最后回复 13 年前
1568080
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)

P
PerterPon#1513 年前
引用 fsiaonma准确来说 是V8内联缓存问题

@fsiaonma 非常感谢。

F
fsiaonma#1313 年前
引用 fsiaonma准确来说 是V8内联缓存问题

@perterpon 我有时间写了一篇 bolg,你兴趣的可以参考一下 http://blog.sina.com.cn/s/blog_6801fe420101qaz2.html

P
PerterPon#1213 年前
引用 fsiaonma准确来说 是V8内联缓存问题

能否准确解释一下内联缓存造成这个问题的原因呢?

G
guoliangchen#1113 年前

这个好像在朴灵大大的博客里面有提到!!

G
guoliangchen#1013 年前

guoliangchen@guoliangchen-N73SV:/桌面/node/example$ node add time1: 1521ms time2: 98ms guoliangchen@guoliangchen-N73SV:/桌面/node/example$ 这是我电脑上运行的时间!

F
fsiaonma#913 年前

准确来说 是V8内联缓存问题

F
fsiaonma#813 年前

@brighthas 这个内存是通过什么工具来获得的

B
brighthas#713 年前

以下是内存和时间的测试结果:

6788KB time运行前使用的内存

time1: 3336ms

9728KB time1 结束后使用的内存

time2: 221ms

9728KB time2 结束后使用的内存

签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3

F
fsiaonma#513 年前

刚找到了原因,是因为 V8 引擎内联缓存的问题

F
fsiaonma#413 年前

XY 说的?

B
biglaojiang#213 年前

应该不是没执行循环,两个循环换个顺序 或者单独执行的话,结果任然如此。 应该是类型转换的问题,一个方法的类型判断应该有缓存,如果有种类型传入的话可能会破坏这种缓存,导致多次判断。

D
dca#113 年前

弱弱的说一句,可能是在addText addNumber裡面省下了很多型別轉換的時間(?)

参与回复

登录后即可参与回复。登录