Быстродействие try/catch
В моём случае я заменил простой if конструкцией try/catch замедлит ли она выполнение скрипта или наоборот этот способ более предпочтительнее так как ошибочные значения редко появляются.
Вариант 1.
listBody.getItem = function(ind){
if(ind<0||ind>=this.childNodes.length)
return false;
return this.childNodes[ind].lastChild;
}
Вариант 2.
listBody.getItem = function(ind){
try{
return this.childNodes[ind].lastChild;
}
catch(e){
return false;
}
}
Хотя в обоих случаях можно обойтись и без проверки, но всё таки интересный вопрос. |
Если это узкое место (выполняется часто, например), лучше использовать if, который проверял бы верное значение и возвращал результат. Try-catch не особо хорош в плане производительности. В вашем случае я бы остановился на варианте:
listBody.getItem = function(ind){
return ((ind in this.childNodes) && this.childNodes[ind].lastChild) || false;
}
|
Цитата:
var startTime = new Date();
for (var __i = 0; __i < 100001; __i++) {
//
}
alert((new Date()) - startTime);
Даже если try/catch здесь сработает быстрее, я бы не стал его так использовать. Все-таки не для этого он задумывался. Разве что в порядке исключения, там, где по-другому оптимизировать никак, но очень надо. |
Цитата:
|
Блок 'try-catch' быстротой никогда не отличался, не работает в совсем старых версиях, в менее простых случаях скорее всего придётся какие-нибудь if-условия втыкать внутрь, чтоб с причиной разобраться...
|
Спасибо за ответы
try/catch это очень полезная конструкция и позволяет упростить создание некоторых вещей. Но всё таки и в правду не стоит им злоупотреблять. Цитата:
listBody.getItem = function(ind){
return ((ind in this.childNodes) && this.childNodes[ind].lastChild) || false;
}
Хорошее решение, лучше чем мой первый вариант. если вы не возражаете я его вставлю к себе. В длинном коде конечно наверное стоит проводить проверки в ходе выполнения кода или перед его выполнением. |
| Часовой пояс GMT +3, время: 03:36. |