Contenido

Pruebas de rendimiento a Trim() en javascript

9 jun

+ 9

Lamentablemente Javascript aún no integra una versión de trim() en el nucleo del lenguaje, y pro ese motivo se han de crear funciones que nos permiten usar esta funcioalidad en nuestros scripts. Y al igual que getElementByClassName() han hecho test de rendimiento para saber cual és la más optima.

11 funciones trim() puestas a prueba dan como resultado una interesante estadística que nos permite seleccionar la que más nos interese.

Funciones 

Trim1()

function trim1 (string) {
	return string.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

Tiempos (FF2/IE6): 15ms / <0.5ms

Trim2()

function trim2 (string) {
	return string.replace(/^\s+/, '').replace(/\s+$/, '');
}

Tiempos (FF2/IE6): 31ms / <0.5ms

Trim3()

function trim3 (string) {
	return string.substring(Math.max(string.search(/\S/), 0), Math.max(string.search(/\S\s*$/), 0));
}

Tiempos (FF2/IE6): 46ms / 31ms

Trim4()

function trim4 (string) {
	return string.replace(/^\s+|\s+$/g, '');
}

Tiempos (FF2/IE6): 47ms / 46ms

Trim5()

function trim5 (string) {
	return string.match(/\S+(?:\s+\S+)*/) || '';
}

Tiempos (FF2/IE6): 156ms / 1656ms

Trim6()

function trim6 (string) {
	return string.replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1');
}

Tiempos (FF2/IE6): 172ms / 2406ms

Trim7()

function trim7 (string) {
	return string.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1');
}

Tiempos (FF2/IE6): 172ms / 1640ms

Trim8()

function trim8 (string) {
	return string.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1');
}

Tiempos (FF2/IE6): 281ms / <0.5ms

Trim9()

function trim9 (string) {
	return string.replace(/^\s*([\S\s]*?)\s*$/, '$1');
}

Tiempos (FF2/IE6): 125ms / 78ms

Trim10()

function trim10 (string) {
	var whitespace = ' \n\r\t\v\f\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
	for (var i = 0; i < string.length; i++) {
		if (whitespace.indexOf(string.charAt(i)) === -1) {
			string = string.substring(i);
			break;
		}
	}
	for (i = string.length; i > 0; i--) {
		if (whitespace.indexOf(string.charAt(i)) === -1) {
			string = string.substring(0, i);
			break;
		}
	}
	return whitespace.indexOf(string.charAt(0)) === -1 ? string : '';
}

Tiempos (FF2/IE6): <0.5ms / <0.5ms

Trim11()

function trim11 (string) {
	string = string.replace(/^\s+/, '');
	for (var i = string.length; i > 0; i--) {
		if (/\S/.test(string.charAt(i))) {
			string = string.substring(0, i);
			break;
		}
	}
	return string;
}

Tiempos (FF2/IE6): <0.5ms / <0.5ms

Las pruebas

 Las pruebas se han realizado sobre Firefox 2.0.0.4 e Internet Explorer 6, sobre esta página.

Conclusión

Pese a que trim1() es la versión más extendida por su facilidad y comodidad, la versión más rápida en todos los navegadores es la trim11().

Curisidad

Si nos fijamos en las funciones veremos que todas excepto una, usan expresiones regulares, lo que generalmente se cree que es más rápido que usar método nativos del lenguaje (en cualquiera) y la función trim10() sin uso de expresiones arroja unos resultados dignos de tener en cuenta.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.