Показать сообщение отдельно
  #5 (permalink)  
Старый 11.01.2010, 18:22
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

а разница есть
N=30; //уровень вложенности
C=10000; //количество повторов;
Tret=0; Ttry=0;

function fn1(){
  n=N; R=0;
  fn2();
  Tret+=((new Date()).getTime()-T);
  R++;
  n=N;
  try{fn2();}catch(e){}
  Ttry+=((new Date()).getTime()-T);
  }

function fn2(){
  T=(new Date()).getTime();
  while (n) fn2(n--);
  if (R) throw new Error('');
  }
 
for(I=0;I<C;I++) fn1();

alert('return: '+(Tret/C)+'ms, try: '+(Ttry/C)+'ms');

//----------------
//машина: 2ггц
//FF3.5:            return: 0.0293ms, try: 4.1967ms
//Chrome3.0.195.38: return: 0.0021ms, try: 0.0147ms 
//IE8:              return: 0.0434ms, try: 0.0583ms
//Opera10.10:       return: 0.0249ms, try: 0.0015ms
//Safari4:          return: 0.0046ms, try: 0.0119ms

Цифры приведены на 1 операцию fn1();
Если не на порядок то все равно быстрее try. Вопрос снят. тему можно колуз если нет вопросов.
А в опере почемуто быстрее...

по идее try/catch должен работать быстрее если интерпретатор потроен грамотно. т.к. взять из списка адрес стека до try и сам адрес возврата при catch на ассемблере это всего 2 операции.

Последний раз редактировалось PeaceCoder, 11.01.2010 в 18:33.
Ответить с цитированием