[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