[Javascript] String Count - Opciones y Rendimiento
Hoy descubrí un sitio web muy interesante, http://jsperf.com/, que permite elaborar casos de prueba y realizarles benchmark.
La función que probé es una muy simple: contar ocurrencias de un String dentro de otro.
Elaboré cuatro funciones (algunas en realidad las tomé de internet):
Los resultados fueron los siguientes:
La función que probé es una muy simple: contar ocurrencias de un String dentro de otro.
Elaboré cuatro funciones (algunas en realidad las tomé de internet):
/** * Opción 1 */ function count1(string, subString, allowOverlapping) { string += ""; subString += ""; if (subString.length <= 0) return string.length + 1; var n = 0, pos = 0; var step = (allowOverlapping) ? (1) : (subString.length); while (true) { pos = string.indexOf(subString, pos); if (pos >= 0) { n++; pos += step; } else break; } return (n); } /** * Opción 2 (split, no recomendado) */ function count2(string, subString) { return string.split(subString).length - 1; } /** * Opción 3 */ function count3(string, subString) { var count, index; for (count = -1, index = 0; index != -1; count++, index = string.indexOf(subString, index + 1)); return count; } /** * Opción 4 (regex) */ function count4(string, subString) { var r = new RegExp(subString, "g"); return (string.match(r)||[]).length; }
Los resultados fueron los siguientes:
- La opción 1 y 3 tienen similar rendimiento.
- Estas son opciones "intermedias", muy estables en cuanto al rendimiento entre diferentes navegadores. La opción 2 en chrome tiene un rendimiento excepcional, y en los otros browsers no tanto.
- La desventaja de esta es la cantidad de memoria que implica dividir un string en sub-strings.
- La opción 4 es mejor solo en chrome.
Resultados de http://jsperf.com/str-count en la fecha 15/10/2013 |
Puede chequear los resultados y probarlo en su navegador favorito en:
Comentarios
Publicar un comentario