try catch vs. returns кто быстрее ?
Задача такая
есть callback'и в таком виде function abc1(){ try {abc2()} catch(e){}; alert('все'); } function abc2(){ и т.д. } function abcN(){ return; // или trow new Error('zdas'); } abc1(); Вопрос1: какой из методов быстрее прийдет к alert'у метод return'ов или метод генерации ошибок? Знаю в PHP метод throw эффективнее. Как обстоят дела в JS? Вопрос2: throw не генерирует утечку памяти ? например, забыл почистить память от адресов возврата, переменные в промежуточных функциях и т.п. ? Кто сталкивался с этим вопросом ? |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Использовать throw/catch/finally для возврата значения, имхо, как-то гхм-м… некошерно.
Kolyaj, я тут бенчмарк сделал. Оказалось, что в Опере время работы throw на глубине 5 функций — 0 мсек, а 5 return — 0 мсек. А если нет разницы… |
а разница есть
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 операции. |
Цитата:
|
Вообще, идеологически, у них (trhow, return) назначения разные; частные случае - это частные случаи.
|
Цитата:
|
Часовой пояс GMT +3, время: 01:38. |