javascript - remove - ¿Es lodash_.size() más rápido que la propiedad de longitud JS?
lodash remove from array (2)
La función size() es más útil en cadenas, cuando necesita el tamaño del resultado. No tiene sentido desempacar todo usando value() solo para obtener el tamaño. Por ejemplo:
_(_.range(10))
.filter(function(item) { return item % 2; })
.size();
A diferencia de la forma más larga:
_(_.range(10))
.filter(function(item) { return item % 2; })
.value()
.length;
Esta función también hace que sea más fácil encontrar el tamaño de un objeto:
_.size({ a: 1, b: 2 });
Opuesto a:
Object.keys({ a: 1, b: 2 }).length;
size()
es sobre la brevedad del código, no el rendimiento.
El artículo (enlace a continuación) sugiere que el uso de la propiedad de longitud en una cadena crea una referencia de objeto que innecesariamente ralentiza la función.
http://www.webreference.com/programming/javascript/jkm3/2.html
En este contexto, ¿cuál es la ventaja de usar lodash _.size ()? ¿Funciona de manera diferente a la propiedad de longitud (nativa ...?)?
Si está contando una matriz o claves en un objeto, ¿hay algún beneficio al usar el tamaño de lodash en lugar de la propiedad de longitud?
De las fuentes de lodash, _.size()
se implementa como:
function size(collection) {
var length = collection ? getLength(collection) : 0;
return isLength(length) ? length : keys(collection).length;
}
Para una matriz, la primera línea es indirectamente haciendo collection.length
modo que _.size()
es, en todo caso, un poquito más pequeño.
En el artículo de rendimiento, el problema del rendimiento es que la búsqueda de length
de la propiedad se está utilizando cuando un número en la pila podría haberse utilizado para lograr el mismo objetivo. En otras palabras, la solución no era buscar una propiedad más rápida, sino evitar la propiedad por completo cuando podía hacerse.