Est lodash.taille () plus rapide que la propriété js length?

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 _.taille() ? Est-ce qu'il se comporte autrement que le (natif...?) la longueur de la propriété?

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

21
demandé sur claireablani 2015-06-24 01:50:20

2 réponses

à Partir de la lodash sources, _.size() est implémenté sous la forme:

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

Pour un tableau, la première ligne est indirectement faire collection.length alors que _.size() est, s'il y a lieu, un peu (minuscule) plus lent.

dans l'article performance, le problème de performance est que la recherche de propriété de length est utilisé lorsqu'un numéro sur la pile pourrait avoir été utilisé pour atteindre le même objectif. En d'autres termes, la solution n'était pas de chercher une propriété plus rapide, mais d'éviter la la propriété tout à fait quand il pouvait être fait.

21
répondu DocMax 2015-06-23 23:20:32

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

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

par opposition à la forme longue:

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

cette fonction permet également de trouver plus facilement la taille d'un objet:

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

plutôt:

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

size() est une question de concision du code, pas de performance.

22
répondu Adam Boduch 2015-06-24 10:30:24