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.



9 comentarios, 0 referencias
+
#