Я знаю, что пустой try... catch
не является хорошей практикой. Однако, я хочу знать причину, по которой пустой try... catch
влияет на производительность в JavaScript?Как пустая попытка поймать влияет на производительность?
следующие коды: фрагменты
function test() {
var start = new Date();
for (var i = 0; i < 100000000; i++){
var r = i % 2;
}
console.log(new Date() - start);
try {
} catch (ex) {
}
}
В результате время работы находится под 709
Chrome
Тем не менее, без пустой try... catch
,
function test3() {
var start = new Date();
for (var i = 0; i < 100000000; i++){
var r = i % 2;
}
console.log(new Date() - start);
}
В результате время работы является 132
.
В нормальных условиях
function test1() {
var start = new Date();
try {
for (var i = 0; i < 100000000; i++){
var r = i % 2;
}
console.log(new Date() - start);
} catch (ex) {
}
}
В результате 792
Редактировать
Если я ставлю эту пустую try catch
в другую функцию
function test4() {
var start = new Date();
for (var i = 0; i < 100000000; i++){
var r = i % 2;
}
console.log(new Date() - start);
wrap();
}
function wrap() {
try {
} catch (ex) {
}
}
Результат 130
, поэтому я думаю, что try catch
является function scope
. Я прав или чего-то не хватает?
Это не влияет на производительность JS в целом (поскольку стандарт не дает никаких гарантий относительно производительности), он влияет на некоторые конкретные реализации JS, которые не могут оптимизировать код с try-catch так же хорошо, как и код без него. Релевантно: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers – zerkms