Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/02/2007, 12:21
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Duda sobre expresiones regulares

Bueno, se me ha ocurrido mirar a ver el rendimiento de esa expresión regular (sólo por curiosidad).

Código:
 
//sólo menores que 56   
var regExp=/^(([0-4]?[0-9])|(5[0-5]))$/;

//genera un numero aleatorio entre min y max
function numAzar(min,max) {	return Math.round(Math.random()*(max-min))+min; }

//el array de los numeros
var arr=new Array();
for(var a=0;a<50000;a++) {
	arr[a]=numAzar(0,56*2);
}

// PRUEBA1 -- transformando los numeros a string y evaluandolos con la expresion regular
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	regExp.test( arr[a].toString() );
}
var final=new Date();
document.write("PRUEBA1 (transformación toString ): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");
// PRUEBA2 -- mirar con un condicional si son menores que 56
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	if( arr[a]<56 );
}
var final=new Date();
document.write("PRUEBA2 (evaluación numerica): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");

//los paso todos a string para hacer la prueba inversa
for(var a=0;a<50000;a++) {
	arr[a]=arr[a].toString();
}
// PRUEBA3 -- evaluandolos con la expresion regular
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	regExp.test( arr[a] );
}
var final=new Date();
document.write("PRUEBA3 (evaluación de string): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");
// PRUEBA4 -- mirar con un condicional si son menores que 56 despues de transformarlos a entero
var inicio=new Date();
for(var a=0;a<arr.length;a++) {
	if( parseInt(arr[a])<56 );
}
var final=new Date();
document.write("PRUEBA4 (transformación parseInt): "+(final.getTime()-inicio.getTime())+" milisengundos.<br/>");
Y los resultados de una ejecución cualquiera son:
PRUEBA1 (transformación toString ): 1893 milisengundos.
PRUEBA2 (evaluación numerica): 230 milisengundos.
PRUEBA3 (evaluación de string): 911 milisengundos.
PRUEBA4 (transformación parseInt): 321 milisengundos.
Con lo que se deduce, que quieras hacerlo como quieras hacerlo, va a rendir bastante más si sacas el número mediante parseInt (bueno, supongo que dependerá si es sencillo o complicadísimo de extraer) y lo evalúas que haciéndolo mediante expresiones regulares.


Sólo por curiosidad...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 05/02/2007 a las 13:34 Razón: un error mio