Warum sollte jemand die Dienstprogrammbibliothek lodash.js oder underscore.js der anderen vorziehen ?
Lodash scheint ein Ersatz für den Unterstrich zu sein, letzterer gibt es schon länger.
Ich denke, beide sind brillant, aber ich weiß nicht genug darüber, wie sie funktionieren, um einen fundierten Vergleich anzustellen, und ich würde gerne mehr über die Unterschiede erfahren.
underscore.js
javascript
lodash
Brian M. Hunt
quelle
quelle
lodash
undunderscore
sind jetzt unter Merge-ThreadAntworten:
Ich habe Lo-Dash erstellt, um eine konsistentere umgebungsübergreifende Iterationsunterstützung für Arrays, Zeichenfolgen, Objekte und
arguments
Objekte 1 bereitzustellen . Seitdem ist es eine Obermenge von Underscore geworden und bietet ein konsistenteres API-Verhalten, mehr Funktionen (wie AMD-Unterstützung, Deep Clone und Deep Merge), gründlichere Dokumentation und Unit-Tests (Tests, die in Node, Ringo, Rhino, Narwhal, PhantomJS ausgeführt werden und Browser), bessere Gesamtleistung und Optimierungen für große Arrays / Objektiterationen und mehr Flexibilität mit benutzerdefinierten Builds und Dienstprogrammen zur Vorkompilierung von Vorlagen.Da Lo-Dash häufiger aktualisiert wird als Underscore, wird ein
lodash underscore
Build bereitgestellt , um die Kompatibilität mit der neuesten stabilen Version von Underscore sicherzustellen.Einmal erhielt ich sogar Push-Zugriff auf Underscore, auch weil Lo-Dash für die Erörterung von mehr als 30 Problemen verantwortlich ist. Fehlerbehebungen, neue Funktionen und Leistungssteigerungen in Underscore v1.4.x +.
Darüber hinaus gibt es mindestens 3 Backbone-Boilerplates, die standardmäßig Lo-Dash enthalten, und Lo-Dash wird jetzt in der offiziellen Dokumentation von Backbone erwähnt .
In Kit Cambridge's Beitrag "Sag" Hallo zu Lo-Dash , um mehr über die Unterschiede zwischen Lo-Dash und Underscore zu erfahren.
Fußnoten:
arguments
Objekte. In neueren Browsern ignorieren Unterstreichungsmethoden Löcher in Arrays , "arguments
Objekt " -Methoden iterieren Objekte, Zeichenfolgen werden als Array-ähnlich behandelt, und Methoden iterieren Funktionen (ohne Berücksichtigung ihrer "Prototyp" -Eigenschaft) und Objekte (Iteration von schattierten Eigenschaften wie "toString" und " "valueOf"), in älteren Browsern jedoch nicht. Unterstreichungsmethoden wie das_.clone
Erhalten von Löchern in Arrays, andere_.flatten
dagegen nicht.quelle
Lo-Dash ist vom Unterstrich inspiriert, ist aber heutzutage eine überlegene Lösung. Sie können Ihre benutzerdefinierten Builds erstellen , eine höhere Leistung erzielen , AMD unterstützen und über hervorragende Zusatzfunktionen verfügen . Überprüfen Sie diese Lo-Dash vs Underscore-Benchmarks auf jsperf und .. diesen fantastischen Beitrag über Lo-Dash :
Eine der nützlichsten Funktionen beim Arbeiten mit Sammlungen ist die Kurzsyntax:
(entnommen aus lodash docs )
quelle
filter
Feature im Unterstrich von 2012 github.com/jashkenas/underscore/issues/648 (der Name istwhere
)Wenn Sie wie ich eine Liste mit Verwendungsunterschieden zwischen Unterstrich und Lodash erwartet haben, gibt es einen Leitfaden für die Migration von Unterstrich zu Lodash .
Hier ist der aktuelle Stand für die Nachwelt:
quelle
Zusätzlich zu Johns Antwort und dem Nachlesen über lodash (das ich bisher als "ich-auch" angesehen hatte, um es zu unterstreichen) und dem Betrachten der Leistungstests, dem Lesen des Quellcodes und der Blog-Beiträge , den wenigen Punkten, die lodash ausmachen viel besser als Unterstrich sind diese:
Es geht nicht um die Geschwindigkeit, sondern um die Konsistenz der Geschwindigkeit (?)
Die Extras in lodash sind auch sehr nützlich.
Hier ist eine Liste der Unterschiede zwischen lodash, und der Unterstrich ist ein Ersatz für Ihre Unterstrichprojekte.
quelle
Dies ist 2014 und ein paar Jahre zu spät. Trotzdem denke ich, dass mein Punkt gilt:
IMHO wurde diese Diskussion ziemlich überproportional. Zitieren des oben genannten Blogposts :
Als ob "einfache Schleifen" und "Vanille-Javascript" nativer sind als Implementierungen von Array- oder Objektmethoden. Herrgott ...
Es wäre sicherlich schön, eine einzige Quelle der Wahrheit zu haben, aber es gibt keine. Selbst wenn Ihnen etwas anderes gesagt wurde, gibt es keinen Vanille-Gott, mein Lieber. Es tut mir Leid. Die einzige Annahme, die wirklich zutrifft, ist, dass wir alle Javascript-Code schreiben, der darauf abzielt, in allen gängigen Browsern eine gute Leistung zu erzielen, da wir wissen, dass alle unterschiedliche Implementierungen derselben Dinge haben. Es ist eine Schlampe, mit der man fertig werden muss, um es milde auszudrücken. Aber das ist die Voraussetzung, ob Sie es mögen oder nicht.
Vielleicht arbeiten Sie an großen Projekten, die eine Twitter-Performance benötigen, damit Sie den Unterschied wirklich erkennen jetzt zwischen 850.000 (Unterstrich) und 2.500.000 (Lodash) Iterationen über eine Liste pro Sekunde sehen können !
Ich jedenfalls bin es nicht. Ich meine, ich habe Projekte bearbeitet, bei denen ich Leistungsprobleme angehen musste, aber sie wurden weder von Underscore noch von Lo-Dash gelöst oder verursacht. Und wenn ich nicht die wirklichen Unterschiede in Implementierung und Leistung (wir sprechen gerade von C ++) einer Schleife über ein iterables Element (Objekt oder Array, spärlich oder nicht!) Habe, störe ich lieber nicht mit irgendwelchen Ansprüche basierend auf den Ergebnissen einer Benchmark-Plattform, die bereits bewerteten .
Es ist nur ein einziges Update von beispielsweise Rhino erforderlich, um die Implementierungen der Array-Methode so in Brand zu setzen, dass kein einziger "mittelalterlicher Loop-Methode besser und für immer funktioniert und so weiter" Priester sich über die einfache Tatsache streiten kann, dass alle Ein plötzliches Array-Verfahren in FF ist viel schneller als sein / ihr meinungsgebundener Brainfuck. Mann, du kannst deine Laufzeitumgebung einfach nicht betrügen, indem du deine Laufzeitumgebung betrügst! Denken Sie darüber nach, wenn Sie ...
... nächstes Mal.
Um es relevant zu halten:
Wählen Sie den Ansatz, der Ihren Anforderungen am besten entspricht. Wie gewöhnlich. Ich würde jederzeit Fallbacks bei tatsächlichen Implementierungen gegenüber bestimmten Laufzeit-Cheats bevorzugen, aber selbst das scheint heutzutage Geschmackssache zu sein. Halten Sie sich an hochwertige Ressourcen wie http://developer.mozilla.com und http://caniuse.com, und alles wird gut.
quelle
Array.from
würden, würden sie wahrscheinlich nicht einmal wissen, was es tun soll. Die JS "Utility Belt" -Personen scheinen so sehr damit beschäftigt zu sein, ihre ach so genialen Problemumgehungen zu fördern, dass sie häufig vergessen, dass sie dadurch den Standardisierungsprozess tatsächlich verwässern. Das Fehlen von Funktionen führt zu keinem Druck auf die "Hersteller" des Browsers. Unterhaltsame Tatsache: 2 der 4 Hauptbrowser basieren auf Open Source-Projekten ( 1 , 2 ).Ich stimme den meisten hier gemachten Aussagen zu, möchte aber nur auf ein Argument für underscore.js hinweisen: die Größe der Bibliothek.
Insbesondere für den Fall, dass Sie eine App oder Website entwickeln, die hauptsächlich auf Mobilgeräten verwendet werden soll, können die Größe des resultierenden Bundles und die Auswirkungen auf die Start- oder Downloadzeit eine wichtige Rolle spielen.
Zum Vergleich sind diese Größen diejenigen, die ich mit dem Source-Map-Explorer nach dem Ausführen von Ionic Serve bemerkt habe:
bearbeitet im Februar 2020 :
Mit BundlePhobia kann die aktuelle Größe von Lo-Dash und Underscore überprüft werden
quelle
source-map-explorer after running ionic serve
Ich bin mir nicht sicher, ob dies OP bedeutet, aber ich bin auf diese Frage gestoßen, weil ich nach einer Liste von Problemen gesucht habe, die ich bei der Migration von Unterstrich zu Lodash berücksichtigen muss.
Ich würde mich sehr freuen, wenn jemand einen Artikel mit einer vollständigen Liste solcher Unterschiede veröffentlichen würde. Lassen Sie mich mit den Dingen beginnen, die ich auf die harte Tour gelernt habe (dh Dinge, die meinen Code bei der Produktion explodieren ließen: /):
_.flatten
Der Unterstrich ist standardmäßig tief und Sie müssen true als zweites Argument übergeben, um ihn flach zu machen. In lodash ist es standardmäßig flach und das Übergeben von true als zweites Argument macht es tief! :) :)_.last
Der Unterstrich akzeptiert ein zweites Argument, das angibt, wie viele Elemente Sie möchten. Inlodash
gibt es keine solche Option. Sie können dies mit emulieren.slice
_.first
(gleicher Fehler)_.template
Der Unterstrich kann auf viele Arten verwendet werden. Eine davon ist die Bereitstellung der Vorlagenzeichenfolge und der Daten sowie das ZurückholenHTML
(oder zumindest hat dies vor einiger Zeit so funktioniert). Inlodash
erhalten Sie eine Funktion, die Sie dann mit den Daten füttern sollten._(something).map(foo)
arbeitet in Unterstrich, aber in lodash musste ich es umschreiben_.map(something,foo)
. Vielleicht war das nur eineTypeScript
Ausgabequelle
_(something).map(foo).value()
.http://benmccormick.org/2014/11/12/underscore-vs-lodash/
Neuester Artikel zum Vergleich der beiden von Ben McCormick:
quelle
Ich habe nur einen Unterschied gefunden, der für mich wichtig war. Die Nicht-Unterstrich-kompatible Version von lodash sind
_.extend()
nicht nicht kopieren über Klasse-Ebene definierten Eigenschaften oder Methoden.Ich habe einen Jasmin-Test in CoffeeScript erstellt, der dies demonstriert:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
Glücklicherweise
lodash.underscore.js
bleibt Underscores Verhalten beim Kopieren von allem erhalten, was für meine Situation das gewünschte Verhalten war.quelle
lodash hat
_.mapValues()
was ist identisch mit underescore_.mapObject()
.quelle
Zum größten Teil ist der Unterstrich eine Teilmenge von lodash. Manchmal, wie derzeit Unterstrich hat coole kleine Funktionen hat lodash nicht wie mapObject. Dieser hat mir viel Zeit bei der Entwicklung meines Projekts gespart.
quelle
Sie sind sich ziemlich ähnlich, mit Lodash übernimmt ...
Beide sind eine Utility-Bibliothek, die die Welt der Utility in JavaScript übernimmt ...
Scheint, dass Lodash jetzt regelmäßiger aktualisiert wird, also mehr in den neuesten Projekten verwendet wird ...
Auch Lodash scheint um ein paar KBs leichter zu sein ...
Beide haben eine gute API und Doc, aber ich denke, Lodash ist besser ...
Hier ist ein Screenshot für jedes Dokument, um den ersten Wert eines Arrays zu erhalten ...
unterstreichen:
lodash:
Da die Dinge von Zeit zu Zeit aktualisiert werden können, überprüfen Sie einfach auch deren Website ...
lodash
unterstreichen
quelle