速度围观,代码在try catch 内和外的执行效率相差5倍多,
虽然用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 回复
据说v8优化靠栈缓存,对循环很明显啊
这个问题…所以…我们才约定 …callback(err) 第一个参数为异常…加上nodejs 的异步回调…一般都不用try catch 吧…
domain 也就算一个玩具
把第一段改成这个再试试 =,=
console.time(1)
try {
throw new Error()
} catch(e) {
(function(){
for (var i = 0; i < 1000000000; i++) {
var p = i % 2
}
})()
}
console.timeEnd(1)
1: 11999ms 1: 3219ms 闭包
长见识了~还真不知道这个~