1696 votes

Différences entre lodash et trait de soulignement

Pourquoi préférez quelqu'un underscore.js ou du lodash.js bibliothèque d’utilitaires sur l’autre ?

Lodash semble être un remplacement pour le trait de soulignement, le dernier ayant été plus longtemps.

Je pense que les deux sont géniaux, mais je ne sais pas assez sur leur fonctionnement pour faire une comparaison instruite, et je voudrais en savoir plus sur les différences.

2128voto

John-David Dalton Points 6270

J'ai créé Lo tableau de bord pour fournir plus cohérente de la croix-environnement itération de soutien pour les tableaux, chaînes de caractères, des objets, et arguments objets1. Depuis, il est devenu un sur-ensemble de Souligner, en fournissant plus cohérente comportement de l'API, de plus en plus de fonctionnalités (comme le support AMD, profonde clone, et la profondeur de fusion), de plus en plus approfondie de la documentation et de l'unité de tests (tests qui courent dans le Nœud, Ringo, le Rhinocéros, le Narval, PhantomJS, et les navigateurs), dans l'ensemble de meilleurs performances et optimisations pour les grands tableaux/itération d'un objet, et plus de flexibilité avec personnalisé et un modèle de pré-compilation d'utilitaires.

Parce que Lo-tableau de bord est mis à jour plus fréquemment que de Soulignement, lodash underscore construire est prévu pour assurer la compatibilité avec la dernière version stable de trait de Soulignement.

À un moment, j'ai même été donné de pousser l'accès à Souligner, en partie parce que les Lo-tableau de bord est responsable de la collecte de plus de 30 questions; atterrissage corrections de bugs, nouvelles fonctionnalités, & perf gains en Souligner v1.4.x+.

En outre, il existe au moins 3 épine Dorsale boilerplates qui incluent Lo tableau de bord par défaut et Lo-tableau de bord est maintenant mentionné dans l'épine Dorsale officiel de la documentation.

Découvrez le Kit de Cambridge post, Dire "Bonjour" à Lo-Dash, pour une meilleure répartition sur les différences entre Lo-tableau de bord et le trait de Soulignement.

Notes de bas de page:

  1. Trait de soulignement n'est pas cohérente de soutien pour les tableaux, chaînes de caractères, des objets, et arguments objets. Dans les navigateurs les plus récents, Soulignent les méthodes d'ignorer les trous dans des tableaux, des "Objets" méthodes d'itération arguments objets, les chaînes sont traités sous forme de tableau, et les méthodes correctement itération des fonctions (en ignorant le "prototype" de la propriété) et des objets (une itération à l'ombre des propriétés comme "toString" et "valueOf"), tandis que dans les navigateurs plus anciens, ils ne seront pas. Aussi, le trait de Soulignement méthodes comme _.clone préserver les trous dans les tableaux, alors que d'autres, comme _.flatten n'en ont pas.

198voto

neiker Points 3066

Lo-tableau de bord est inspiré par le caractère de soulignement, mais de nos jours, est supérieur à la solution. Vous pouvez faire votre personnalisé, ont une performance supérieure, support AMD et ont de grandes fonctionnalités supplémentaires. Cochez cette Lo-Dash vs trait de Soulignement repères sur jsperf et.. ce génial post sur lo-tiret:

Un de la caractéristique la plus utile lorsque vous travaillez avec des collections, est l'abréviation de syntaxe:

var characters = [
  { 'name': 'barney', 'age': 36, 'blocked': false },
  { 'name': 'fred',   'age': 40, 'blocked': true }
];

// using "_.pluck" callback shorthand
_.filter(characters, 'blocked');

// using underscore
_.filter(characters, function(character) { return character.blocked; } );

// → [{ 'name': 'fred', 'age': 40, 'blocked': true }]

// using "_.where" callback shorthand
_.filter(characters, { 'age': 36 });

// using underscore
_.filter(characters, function(character) { return character.age===36; } );

// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]

(prendre de lodash docs)

60voto

Kumar Harsh Points 3960

En plus de Dalton réponse, et à la lecture sur lodash (que j'ai eu jusqu'à présent considéré comme un "me-too", afin de souligner), et de voir les tests de performance, en lisant le code source, et de billets de blog, les quelques points qui rendent lodash de beaucoup supérieure à souligner sont les suivants:

  1. Il n'est pas sur la vitesse, il est à propos de la cohérence de la vitesse (?)

    Si vous regardez dans les trait de soulignement du code source, vous allez le voir dans les premières lignes qui soulignent les chutes-de retour sur le natif implémentations de nombreuses fonctions. Bien que dans un monde idéal, cela aurait été une meilleure approche, si vous regardez certains des perf liens donnés dans ces diapositives, il n'est pas difficile de tirer la conclusion que la qualité de ces "indigènes implémentations' varier d'un navigateur à navigateur. Firefox est sacrément rapide à certaines fonctions, et dans certains Chrome domine. (J'imagine qu'il y aurait quelques scénarios où IE ne dominent trop). Je crois que c'est mieux de préférer un code dont la performance est plus compatible sur tous les navigateurs.

    Faire lire le post de blog plus tôt, et au lieu de le croire à cause de lui, qu'on en juge par l'exécution de l' repères. Je suis stupéfait droit maintenant, en voyant un lodash l'exécution de 100 à 150% plus rapide que de soulignement, même simple, natif de fonctions telles que l' Array.every de Chrome!

  2. Les extras dans lodash sont aussi très utiles.

  3. Comme pour Xananax très upvoted commentaire suggérant contribution pour souligner le code: C'est toujours mieux d'avoir de la BONNE concurrence, non seulement de garder de l'innovation, mais aussi vous pousse à garder vous-même (ou votre bibliothèque) en bonne forme.

Voici une liste des différences entre lodash, et c'est à souligner-construction est une baisse-dans le remplacement pour votre trait de soulignement projets.

42voto

Lukas Bünger Points 781

C'est en 2014 et un couple d'années trop tard. Je pense que mon point est titulaire:

À mon humble avis, cette discussion a soufflé hors de proportion un peu. Citant le susmentionnés post de blog:

La plupart JavaScript bibliothèques utilitaires, comme le Soulignent, la saint-Valentin, et wu, s'appuyer sur la "native-première double approche." Cette approche préfère natif implémentations, pour retomber à la vanille JavaScript uniquement si le natif équivalent n'est pas pris en charge. Mais jsPerf a révélé intéressant tendance: le moyen le plus efficace pour effectuer une itération sur un tableau ou d'une matrice (comme la collection est d'éviter le natif implémentations entièrement, en optant pour simple boucle de la place.

Comme si "simple boucle" et "vanille Javascript" sont plus natif de Tableau ou d'un Objet de la méthode mise en œuvre. Mon dieu ...

Il serait certainement agréable d'avoir une seule source de vérité, mais il n'y en a pas. Même si vous avez été dit dans le cas contraire, il n'y a pas de Vanille Dieu, mon cher. Je suis désolé. La seule hypothèse qui est vrai, c'est que nous sommes tous d'écriture de code Javascript qui vise à effectuer bien dans tous les principaux navigateurs, sachant que tous ont des versions différentes de la même chose. C'est une chienne pour y faire face, et c'est un euphémisme. Mais c'est le principe, que vous le vouliez ou non.

Peut-être y'all sont à travailler sur des projets à grande échelle qui ont besoin de twitterish de performance de sorte que vous vraiment voir la différence entre de 850 000 (trait de soulignement) par rapport à 2 500 000 (lodash) itérations sur une liste par sec dès maintenant!

Pour ma part, je ne suis pas. Je veux dire, j'ai travaillé dans des projets où j'ai eu à régler les problèmes de rendement, mais ils n'ont jamais été résolus ou causés par aucun trait de Soulignement ni Lo tableau de bord. Et sauf si je me procurer de réelles différences dans la mise en œuvre et de la performance (nous parlons de C++) permet de dire une boucle sur un objet iterable (objet ou un tableau, rares ou pas!), Je préfère ne pas les encombrer avec toute réclamation fondée sur les résultats d'un benchmark de la plate-forme qui est déjà opiniâtre.

Il n'a besoin que d'une seule mise à jour de permet de dire Rhino pour définir sa méthode de Tableau implémentations sur le feu dans un mode que pas un seul "médiévale boucle de méthodes fonctionnent mieux, et à jamais, et autres joyeusetés" prêtre peut faire valoir son chemin à travers le simple fait que tout d'un coup, les méthodes de tableau dans FF sont beaucoup plus rapides que ses opinions brainfuck. L'homme, vous ne pouvez pas tricher votre environnement d'exécution par la tricherie de votre environnement d'exécution! De penser que, lors de la promotion de ...

votre ceinture d'utilité

... la prochaine fois.

Donc, pour garder pertinent:

  • L'utilisation de Soulignement si vous êtes dans le confort sans sacrifier la native ish.
  • Utilisation Lo-Dash si vous êtes à la commodité et à l'instar de ses fonctionnalités étendues catalogue (copie en profondeur, etc.) et si vous êtes dans le besoin désespéré de l'instant de la performance et, le plus important n'est pas l'esprit de s'installer pour une alternative dès que l'API native de l'audace opiniâtre workaurounds. Qui va bientôt arriver. Période.
  • Il y a même une troisième solution. DIY! Connaître votre environnement. Connaître les incohérences. Lire leur (John-Davidet Jeremy) du code. N'utilisez pas de ceci ou de cela sans être en mesure d'expliquer pourquoi une consistance/couche de compatibilité qui est vraiment nécessaire et améliore votre flux de travail ou améliore les performances de votre application. Il est très probable que vos exigences sont remplies avec un simple polyfill que vous êtes parfaitement capable d'écrire vous-même. Les deux bibliothèques sont tout simplement à la vanille avec un peu de sucre. Ils combattent au-dessus, qui est de servir le plus sucré de la tarte. Mais croyez-moi, à la fin, les deux ne sont de cuisson avec de l'eau. Il n'y a pas de Vanille Dieu, donc il n'y a pas de Vanille pape, droit?

Choisissez quelle que soit l'approche qui convient à vos besoins le plus. Comme à l'habitude. Je préfère de base sur les implémentations réelles plus opiniâtres d'exécution cheats en tout temps, mais même cela semble être une question de goût, de nos jours. Stick à des ressources de qualité comme http://developer.mozilla.com et http://caniuse.com et vous serez amende.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X