Warum sollte jemand entweder die lodash.js oder die underscore.js Hilfsbibliothek der anderen vorziehen?
Lodash scheint ein direkter Ersatz für underscore zu sein, wobei letztere schon länger existiert.
Ich denke, beide sind brillant, aber ich weiß nicht genug darüber, wie sie funktionieren, um einen fundierten Vergleich zu machen, und ich würde gerne mehr über die Unterschiede wissen.
Ich habe Lo-Dash entwickelt, um konsistentere, umgebungsübergreifende Iterationsunterstützung für Arrays, Strings, Objekte und arguments
-Objekte zu bieten1. Seitdem ist es zu einer Obermenge von Underscore geworden, die ein konsistenteres API-Verhalten, mehr Features (wie AMD-Unterstützung, Deep Clone und Deep Merge), eine gründlichere Dokumentation und Unit-Tests (Tests, die in Node, Ringo, Rhino, Narwhal, PhantomJS und Browsern laufen), eine bessere Gesamtleistung und Optimierungen für große Arrays/Objekt-Iterationen und mehr Flexibilität mit Custom Builds und Template-Pre-Compilation-Utilities bietet.
Da Lo-Dash häufiger aktualisiert wird als Underscore, wird ein lodash underscore
build bereitgestellt, um die Kompatibilität mit der letzten stabilen Version von Underscore zu gewährleisten.
An einem Punkt wurde mir sogar Push-Zugang zu Underscore gewährt, zum Teil weil Lo-Dash für das Aufwerfen von mehr als 30 Problemen verantwortlich ist; Landung von Fehlerbehebungen, neuen Funktionen, & Perf-Gewinne in Underscore v1.4.x+.
Darüber hinaus gibt es mindestens 3 Backbone Boilerplates, die Lo-Dash standardmäßig enthalten und Lo-Dash wird jetzt in der offiziellen Dokumentation von Backbone erwähnt.
Schauen Sie sich Kit Cambridge's Beitrag, Say "Hello" to Lo-Dash, für einen tieferen Einblick in die Unterschiede zwischen Lo-Dash und Underscore an.
Fußnoten:
arguments
-Objekte. In neueren Browsern ignorieren Underscore-Methoden Löcher in Arrays, "Objects" -Methoden iterieren arguments
-Objekte, Strings werden als Array-ähnlich behandelt, und Methoden iterieren korrekt Funktionen (ignorieren ihre "prototype" -Eigenschaft) und Objekte (iterieren schattierte Eigenschaften wie "toString" und "valueOf"), während sie das in älteren Browsern nicht tun. Außerdem bewahren Underscore-Methoden wie _.clone
Löcher in Arrays, während andere wie _.flatten
dies nicht tun'.Lo-Dash wurde von underscore inspiriert, ist aber heutzutage eine bessere Lösung. Sie können Ihre benutzerdefinierten Builds erstellen, haben eine höhere Leistung, unterstützen AMD und haben großartige Zusatzfunktionen. Schauen Sie sich diese Lo-Dash vs Underscore Benchmarks auf jsperf und diesen großartigen Beitrag über Lo-Dash an:
Eines der nützlichsten Features, wenn man mit Sammlungen arbeitet, ist die Kurzschriftsyntax:
var characters = [
{ 'name': 'barney', 'age': 36, 'blocked': false },
{ 'name': 'fred', 'age': 40, 'blocked': true }
];
// using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });
// using underscore
_.filter(characters, function(character) { return character.age === 36; } );
// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]
(entnommen aus lodash docs)
Neben der Antwort von John und der Lektüre von Lodash (das ich bisher als "me-too" zu Underscore angesehen hatte) und den Leistungstests, dem Lesen des Quellcodes und den [Blog-Posts] (http://kitcambridge.be/blog/say-hello-to-lo-dash/), sind die wenigen Punkte, die Lodash Underscore weit überlegen machen, die folgenden:
Lesen Sie den Blogbeitrag von vorhin, und anstatt ihm zu glauben, beurteilen Sie ihn selbst, indem Sie die [Benchmarks] (http://lodash.com/benchmarks) ausführen. Ich bin gerade verblüfft, wenn ich sehe, dass Lodash selbst bei einfachen, nativen Funktionen wie Array.every
in Chrome 100-150% schneller ist als Underscore!
Hier ist eine Liste der Unterschiede zwischen lodash, und es's underscore-build ist ein drop-in Ersatz für Ihre underscore Projekte.