web-dev-qa-db-fra.com

Lodash _.size () est-il plus rapide que la propriété de longueur JS?

L'article (lien ci-dessous) suggère que l'utilisation de la propriété length sur une chaîne crée une référence d'objet qui ralentit inutilement la fonction.

http://www.webreference.com/programming/javascript/jkm3/2.html

Dans ce contexte, quel est l'avantage d'utiliser lodash _.size ()? Fonctionne-t-elle différemment de la propriété de longueur (native ...?)?

Si vous comptez un tableau ou des clés dans un objet, y a-t-il un avantage à utiliser la taille lodash au lieu de la propriété length?

26
claireablani

A partir des sources lodash, _.size() est implémentée comme:

function size(collection) {
  var length = collection ? getLength(collection) : 0;
  return isLength(length) ? length : keys(collection).length;
}

Pour un tableau, la première ligne fait indirectement collection.length De sorte que _.size() est, le cas échéant, un peu (minuscule) un peu plus lent.

Dans l'article sur les performances, le problème de performances est que la recherche de propriété de length est utilisée lorsqu'un nombre sur la pile aurait pu être utilisé pour atteindre le même objectif. En d'autres termes, la solution n'était pas de rechercher une propriété plus rapide, mais d'éviter complètement la propriété quand elle pourrait être effectuée.

28
DocMax

La fonction size () est la plus utile dans les chaînes, lorsque vous avez besoin de la taille du résultat. Il est inutile de tout déballer en utilisant value () juste pour obtenir la taille. Par exemple:

_(_.range(10))
    .filter(function(item) { return item % 2; })
    .size();

Par opposition à la forme plus longue:

_(_.range(10))
    .filter(function(item) { return item % 2; })
    .value()
    .length;

Cette fonction facilite également la recherche de la taille d'un objet:

_.size({ a: 1, b: 2 });

Par opposition à:

Object.keys({ a: 1, b: 2 }).length;

size() concerne la brièveté du code, pas les performances.

24
Adam Boduch