速度围观,代码在try catch 内和外的执行效率相差5倍多,
发布于 6 年前 作者 shanelau 10095 次浏览 最后一次编辑是 4 年前

虽然用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 闭包

长见识了~还真不知道这个~

回到顶部