虽然用try catch 捕捉next错误很爽,但我们知道不管是try块中的代码还是catch块中的代码,都是无法让V8引擎进行任何优化的,不能优化的函数比优化的函数会慢上好几倍,
也就是说try和catch中的代码比外面的慢很多倍。但是如果是调用try catch块外面的函数就不会有这个问题了。
console.time(1)
try {
throw new Error()
} catch(e) {
for (var i = 0; i < 1000000000; i++) {
var p = i % 2
}
}
console.timeEnd(1)
// 取出来放在外面
console.time(2)
try {
throw new Error()
} catch(e) {
run()
}
console.timeEnd(2)
function run() {
for (var i = 0; i < 1000000000; i++) {
var p = i % 2
}
}
这段代码的的执行结果:
1: 7565ms
2: 1362ms
为何区别这么大呢, 求大神解释
回复 (7)
D
据说v8优化靠栈缓存,对循环很明显啊
Y
这个问题....所以..我们才约定 ...callback(err) 第一个参数为异常......加上nodejs 的异步回调...一般都不用try catch 吧...
Y
F
domain 也就算一个玩具
Z
把第一段改成这个再试试 =,=
console.time(1)
try {
throw new Error()
} catch(e) {
(function(){
for (var i = 0; i < 1000000000; i++) {
var p = i % 2
}
})()
}
console.timeEnd(1)
Y
1: 11999ms 1: 3219ms 闭包
K
长见识了还真不知道这个
参与回复
登录后即可参与回复。登录