Me gustaría algunas otras opiniones sobre qué es más eficiente en este código. Básicamente, en el siguiente código, hay un loop setInterval y necesito que 4 requisitos sean verdaderos antes de que el código se ejecute en el ciclo. Entonces, en v.1, escribí una declaración if que verificaba 4. Funcionó bien.Javascript: ¿Qué es más eficiente, bloque IF o TRY/CATCH?
Luego cambié a simplemente usar try/catch, con el código que quiero ejecutar sentado en try {}. La lógica era que durante cada ciclo, se generaba una excepción pero se suprimía para cada condición inválida. En el ciclo final donde todas las condiciones son verdaderas, el código se ejecuta y borra el intervalo.
Cualquiera de los dos funciona. Me gusta el método try/catch porque hay menos código condicional que necesito escribir y me preocupa romper. Pero me preocupa que try/catch sea realmente ineficiente, especialmente en un loop setInterval() que alcanza los 100 ms. ¿Cuáles son algunas opiniones de otras mentes brillantes aquí en SO?
Try/Catch
var intvar = setInterval(function(){
try{
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a').replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1).addClass('selected').find('#'+nav[pageid].t2).addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3).addClass('selected').find('#'+nav[pageid].t4).addClass('subselect'); //leftnav
}catch(err){}
},100);
Si el bloque
var intvar = setInterval(function(){
if(typeof jQuery == 'function' && typeof nav == 'object' && typeof pageid != 'undefined' && typeof document.getElementById('leftnav') == 'object'){
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a').replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1).addClass('selected').find('#'+nav[pageid].t2).addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3).addClass('selected').find('#'+nav[pageid].t4).addClass('subselect'); //leftnav
}
},100);
Solo para agregar a esto, el costo de la prueba/captura es cuando se lanza una excepción, de lo contrario es insignificante. Por lo tanto, si puede probar de manera confiable la condición (y evitar la excepción) con un if si es más eficiente. –
No sé sobre JavaScript, pero hasta donde yo sé, un bloque try empuja algunas cosas en la pila. Un bloque de prueba dentro de un circuito cerrado lo haría mucho más lento que un bloque de prueba fuera del circuito. ¿Es de alguna manera diferente en JavaScript? –