Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.04.2009, 22:21
Аспирант
Отправить личное сообщение для milk3dfx Посмотреть профиль Найти все сообщения от milk3dfx
 
Регистрация: 26.01.2009
Сообщений: 30

Быстродействие 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;
	}
}

Хотя в обоих случаях можно обойтись и без проверки, но всё таки интересный вопрос.
Ответить с цитированием
  #2 (permalink)  
Старый 26.04.2009, 23:18
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Если это узкое место (выполняется часто, например), лучше использовать if, который проверял бы верное значение и возвращал результат. Try-catch не особо хорош в плане производительности. В вашем случае я бы остановился на варианте:
listBody.getItem = function(ind){
    return ((ind in this.childNodes) && this.childNodes[ind].lastChild) || false;
}
Ответить с цитированием
  #3 (permalink)  
Старый 26.04.2009, 23:26
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от milk3dfx
замедлит ли она выполнение скрипта или наоборот этот способ более предпочтительнее
Для тестирования в простейших случаях подходит такой код:
var startTime = new Date();
for (var __i = 0; __i < 100001; __i++) {
	//
}
alert((new Date()) - startTime);


Даже если try/catch здесь сработает быстрее, я бы не стал его так использовать. Все-таки не для этого он задумывался. Разве что в порядке исключения, там, где по-другому оптимизировать никак, но очень надо.
Ответить с цитированием
  #4 (permalink)  
Старый 26.04.2009, 23:29
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Андрей Параничев
лучше использовать if, который проверял бы верное значение и возвращал результат
А, кстати, тоже "философский" вопрос. Как правило, возврат верного значения требует различных проверок, предварительных действий и т.д. Поэтому, чаще - наоборот - сначала отсеиваются (сразу return'ами) все ложные условия (нет смысла продолжать анализировать код, если из 10 проверок, сразу не сработала первая - значит, выходим), а дальше уже идёт обработка и возврат верного значения. Хотя, когда как, конечно.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #5 (permalink)  
Старый 26.04.2009, 23:40
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Блок 'try-catch' быстротой никогда не отличался, не работает в совсем старых версиях, в менее простых случаях скорее всего придётся какие-нибудь if-условия втыкать внутрь, чтоб с причиной разобраться...
Ответить с цитированием
  #6 (permalink)  
Старый 27.04.2009, 01:31
Аспирант
Отправить личное сообщение для milk3dfx Посмотреть профиль Найти все сообщения от milk3dfx
 
Регистрация: 26.01.2009
Сообщений: 30

Спасибо за ответы
try/catch это очень полезная конструкция и позволяет упростить создание некоторых вещей. Но всё таки и в правду не стоит им злоупотреблять.

Цитата:
Для тестирования в простейших случаях подходит такой код:
обязательно буду пользоваться
listBody.getItem = function(ind){
    return ((ind in this.childNodes) && this.childNodes[ind].lastChild) || false;
}

Хорошее решение, лучше чем мой первый вариант. если вы не возражаете я его вставлю к себе.
В длинном коде конечно наверное стоит проводить проверки в ходе выполнения кода или перед его выполнением.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35