Быстродействие 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, время: 00:09. |