De ce cineva ar prefera fie lodash.js sau underscore.js utility library peste celelalte?
Lodash pare a fi un înlocuitor drop-in pentru a sublinia, acestea din urmă fiind în jurul valorii de mai mult.
Cred că ambele sunt geniale, dar eu nu știu suficient de multe despre cum funcționează de a face o educat comparație, și aș dori să știu mai multe despre diferențele.
Am creat Lo-Dash pentru a oferi mai consistent cross-mediu de repetare suport pentru tablouri, siruri de caractere, obiecte, și "argumente" obiecte1. Ea a devenit un superset de Subliniere, oferind mai consistent API comportament, mai caracteristici (ca AMD sprijin, adânc clona, și de adânc merge), mai aprofundată documentația și unitatea de teste (teste care rula în Nod, Ringo, Rhino, Narval, PhantomJS, și browsere), performanța generală mai bună și optimizări pentru tablouri mari/obiect iterație, și o mai mare flexibilitate cu personalizat construiește și șablon de pre-compilare utilități.
Pentru că Lo-Dash este actualizat mai frecvent decât o Subliniere, o lodash de subliniere
construi este oferit pentru a asigura compatibilitatea cu cea mai recentă versiune stabilă de Subliniere.
La un moment dat am fost chiar dat apăsare de acces pentru a Sublinia, în parte pentru că Lo-Dash este responsabil pentru creșterea mai mult de 30 de probleme; aterizare bug-uri, caracteristici noi, & perf câștiguri în Sublinia v1.4.x+.
În plus, există cel puțin 3 Vertebrală boilerplates care includ Lo-Dash implicit și Lo-Dash este acum menționat în Coloana oficială a lui documentația.
Check out Kit Cambridge's de post, Spune "Buna ziua" a Lo-Dash, pentru o mai profundă defalcare pe diferențele între Lo-Dash și Subliniere.
Note de subsol:
_.clona
păstra găuri în tablouri, în timp ce alții ca _.aplatiza
don't.Lo-Dash este inspirat de subliniere, dar în zilele noastre este superioară soluție. Puteți face personalizat construiește, o mai mare performanță, suport AMD și-au mare de caracteristici suplimentare. Verifica acest lucru Lo-Dash vs Subliniere de referință pe jsperf și.. acest minunat post despre lo-dash:
Una dintre cele mai caracteristică utilă atunci când lucrați cu colecții, este o prescurtare sintaxa:
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 }]
(preluat din lodash docs)
Dacă ca mine, te așteptai la o listă de utilizare diferențe între subliniere și lodash, acolo's a ghid pentru migrarea de subliniere a lodash.
Aici's starea actuală de ea, pentru posteritate:
- caracterul de Subliniere
_.orice este Lodash
_.unele`- caracterul de Subliniere
_.toate
este Lodash_.fiecare
- caracterul de Subliniere
_.compune
este Lodash_.flowRight
- caracterul de Subliniere
_.conține
este Lodash_.include
- caracterul de Subliniere
_.fiecare
nu permite ieșirea prin revenirea "false"- caracterul de Subliniere
_.findWhere
este Lodash `_.găsi- caracterul de Subliniere
_.aplatiza
este profundă în mod implicit în timp ce Lodash este superficial- caracterul de Subliniere
_.groupBy
acceptă o iteratee că este trecut de parametri(valoare, index, originalArray), în timp ce în Lodash, la iteratee pentru
_.groupByeste trecut doar un singur parametru:
(valoare)`.- caracterul de Subliniere
_.indexOf cu 3-lea parametru "nedefinit" este Lodash
_.indexOf`- caracterul de Subliniere
_.indexOf cu 3 parametrul "true" este Lodash
_.sortedIndexOf`- caracterul de Subliniere
_.indexBy
este Lodash_.keyBy
- caracterul de Subliniere
_.invoc
este Lodash_.invokeMap
- caracterul de Subliniere
_.mapObject
este Lodash_.mapValues
- caracterul de Subliniere
_.max combină Lodash
.max & `.maxBy`- caracterul de Subliniere
_.min
combină Lodash_.min
&_.minBy
- caracterul de Subliniere
_.proba se combină Lodash
.proba&
.sampleSize`- caracterul de Subliniere
_.obiect
combină Lodash_.fromPairs "și"_.zipObject
- caracterul de Subliniere
_.omite
de un predicat este Lodash_.omitBy
- caracterul de Subliniere
_.perechi este Lodash
_.toPairs`- caracterul de Subliniere
_.alege
de un predicat este Lodash_.pickBy
- caracterul de Subliniere
_.smulge-este Lodash
_.harta- caracterul de Subliniere
_.sortedIndex
combină Lodash_.sortedIndex
&_.sortedIndexOf
- caracterul de Subliniere
_.uniq
de uniteratee
este Lodash_.uniqBy
- caracterul de Subliniere
_.unde este Lodash
_.filtru`- caracterul de Subliniere
_.isFinite
nu se aliniază cu Numărul.isFinite<br> (de exemplu,
_.isFinite('1')` returnează "adevărat" în Subliniere dar "false" în Lodash)- caracterul de Subliniere
_.meciuri
prescurtare nu are suport adânc comparații
(de exemplu,_.filtru(obiecte, { 'o': { 'b': 'c' } })
)- Subliniere ≥ 1.7 & Lodash
_.șablon
sintaxa este_.format(string, opțiune)(date)
- Lodash `_.memoize "cache" sunt "Hartă" ca obiecte
- Lodash nu acceptă un "context" argument pentru mai multe metode în favoarea_.lega`
- Lodash sprijină implicit înlănțuirea, leneș înlănțuirea, & comenzi rapide de fuziune
- Lodash split său supraîncărcat
_.cap
,_.ultima
,_.restul
, &_.inițial în<br>
.ia,
.takeRight,
.drop, &
.dropRight<br> (de exemplu,
.cap(matrice, 2)în Subliniere
.ia(matrice, 2)` în Lodash)
În plus față de John's a răspunde, și de lectură pe lodash (pe care am avut până acum privit ca un "mi-prea" pentru a sublinia), și văzând teste de performanță, citirea codului sursă, și blog, câteva puncte care face lodash mult superioară față de subliniere sunt acestea:
Dacă te uiți în sublinia's codului sursă, tu'll vedea în primele câteva linii care subliniază cade înapoi pe nativ implementări de multe funcții. Deși într-o lume ideală, ar fi fost o abordare mai bună, dacă te uiți la unele dintre perf link-urile date în aceste slide-uri, nu este greu să tragem concluzia că, în calitate de cei 'nativ implementări' variaza foarte mult de la browser la browser. Firefox este al naibii de repede în unele funcții, iar în unele Chrome domină. (Îmi imaginez că ar fi niște scenarii în cazul în care IE-ar domina prea). Cred că-l'e mai bine să prefere un cod al cărui performanță este mai consistent pe diferite browsere.
Nu citi blog post mai devreme, și în loc de a crede că de dragul său, judecător pentru tine prin rularea repere. Sunt uimit chiar acum, văzând-o lodash efectuarea de 100-150% mai rapid decât subliniere în chiar simplu, nativ funcții, cum ar fi `Matrice.fiecare în Chrome!
Aici este o listă a diferențelor](https://github.com/bestiejs/lodash/wiki/build-differences) între lodash, și-l's subliniere-build este un înlocuitor drop-in pentru a sublinia proiecte.
Acest lucru este 2014 și un cuplu de ani prea târziu. Încă mai cred că punctul meu deține:
IMHO această discuție a luat proporții destul de un pic. Referire la cele menționate mai sus blog:
cele Mai JavaScript utilitate biblioteci, cum ar fi de Subliniere, Valentine, și wu, se bazează pe "nativ-prima abordare duală." Această abordare preferă nativ implementări, care se încadrează înapoi în vanilie JavaScript numai dacă nativ echivalent nu este acceptată. Dar jsPerf a arătat un joc interesant tendință: cel mai eficient mod de a repeta peste o matrice sau matrice-ca de colectare este de a evita nativ implementări în întregime, optând pentru bucle simple în loc.
Ca și în cazul "bucle simple" și "de vanilie Javascript" sunt mai originar decât Array sau Object metoda implementări. Doamne ...
Cu siguranță că ar fi frumos să avem o singură sursă de adevăr, dar nu e't. Chiar daca's-a spus în caz contrar, nu există nici o Vanilie Dumnezeu, draga mea. Am'm rău. Singura ipoteza care deține într-adevăr este că suntem cu toții scrierea de cod Javascript care vizează funcționează bine în toate browserele importante, știind că toate acestea au implementări diferite ale aceleași lucruri. L's o curvă să facă față, să-l puneți blând. Dar asta's premisa, indiferent dacă vă place sau nu.
Poate y'toate sunt de lucru pe proiecte de mare amploare care au nevoie de twitterish performanță, astfel încât veți vedea într-adevăr diferența între 850.000 de (subliniere) vs 2.500.000 de (lodash) iterații pe o listă pe sec chiar acum!
Eu unul nu sunt. Adică, am lucrat proiecte în care am avut de a aborda probleme de performanță, dar ei nu au fost niciodată rezolvate sau cauzate de nici Subliniere, nici Lo-Dash. Și dacă nu fac rost de diferențele reale în punerea în aplicare și de performanță (ne're vorbesc C++ acum) de sa zicem o bucla peste o iterable (obiect sau matrice, rare sau nu!), Eu mai degrabă don't obține deranjat cu orice pretenții pe baza rezultatelor unui indice de referință platformă care este deja dogmatic.
Este nevoie doar de o singură actualizare a vă permite să spun de Rinocer pentru a stabili metoda Matrice implementări pe foc într-o manieră care nu este un singur "medieval buclă metode de a efectua mai bine și pentru totdeauna și fleacuri" preotul poate argumenta lui/ei de drum în jurul valorii de simplul fapt că dintr-o dată serie de metode de la FF sunt mult mai rapide decât lui/ei dogmatic en. Omule,'t ieftin runtime environment prin înșelăciune ta runtime environment! Cred că despre asta când promovarea ...
centura ta
... data viitoare.
Așa că să-l păstrați relevante:
Alege orice abordare se potrivește nevoilor dumneavoastră cel mai mult. Ca de obicei. Am'd prefera fallbacks pe real implementări peste dogmatic runtime ieftin oricand, dar chiar că pare a fi o chestiune de gust în zilele noastre. Stick la resurse de calitate ca http://developer.mozilla.com și http://caniuse.com și tu'll fi bine.
Am'm de acord cu cele mai multe lucruri de spus aici, dar vreau doar să subliniez un argument în favoarea underscore.js: dimensiunea de bibliotecă.
Special în cazul în care sunteți în curs de dezvoltare o aplicație sau site-ul care intenționează să utilizeze cea mai mare parte de pe dispozitive mobile, dimensiunea de pachet și efectul pe portbagaj sau timpul de descărcare poate avea un rol important.
Pentru comparație, aceste dimensiuni sunt alea am observat cu sursa-harta-explorer după rularea ionic servi:
lodash: 523kB
underscore.js: 51.6kb
Nu știu dacă asta este ceea ce OP vrut, dar am dat peste această întrebare pentru că am fost în căutarea pentru o listă de probleme trebuie să păstrați în minte atunci când migrează de subliniere a lodash.
Aș aprecia dacă cineva a postat un articol cu o listă completă de astfel de diferențe. Permiteți-mi să încep cu lucrurile pe care am'am învățat la fel de greu (asta este, lucrurile pe care a făcut codul meu exploda pe producție:/) :
_.ultima
în sublinia acceptă un al doilea argument pe care vă spune cât de multe elemente pe care doriți. În lodash
nu există nici o astfel de opțiune. Vă pot emula acest cu .felie
_.primul
(aceeasi problema)_.șablon în subliniere poate fi folosit în mai multe moduri, dintre care unul este furnizarea de modelul șir și a datelor și obținerea de
HTMLspate (sau cel puțin asta's cum a lucrat ceva timp în urmă). În
lodash` ai primi o funcție care ar trebui apoi să se hrănească cu datele._(ceva).harta(foo)
lucreaza in subliniere, dar în lodash a trebuit sa-l rescriu pentru a _.harta(ceva,foo)
. Poate că a fost doar o Script
-problemahttp://benmccormick.org/2014/11/12/underscore-vs-lodash/
Ultimul articol comparând cele două de Ben McCormick:
- Lo-Dash's API este un superset de Subliniere's.
- Sub capota [Lo-Dash] a fost complet rescris.
- Lo-Dash este cu siguranta mai lent decât de Subliniere.
- Ceea ce s-a Lo-Dash a adăugat?
- Îmbunătățiri de Uzabilitate
- Funcționalități Suplimentare
- Câștiguri de Performanță
- Prescurtare sintaxe pentru înlănțuirea
- Personalizat Construiește de a folosi doar ceea ce ai nevoie
- Semantic versiunilor și 100% acoperire cod
Am găsit o diferență care a ajuns să fie important pentru mine. Non-subliniere-versiune compatibilă de lodash's _.extend ()
nu copia peste clasa de nivel definit de proprietăți sau metode.
Am'am creat o Iasomie de testare în CoffeeScript care demonstrează acest lucru:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
Din fericire, lodash.underscore.js
păstrează Sublinia's comportamentul de a copia totul, care pentru situația mea a fost comportamentul dorit.
Acestea sunt destul de similare, cu Lodash este preluat...
Ambele sunt un utility library care ia lumea de utilitate în JavaScript...
Pare Lodash este obtinerea actualizate mai des acum, cu atât mai mult folosite în cele mai recente proiecte...
De asemenea, Lodash se pare că este mai ușor de un cuplu de KBs...
Ambele au o bună api și doc, dar cred că Lodash unul este mai bine...
Aici este captura de ecran pentru fiecare dintre docs pentru a obține prima valoare dintr-o serie...
subliniere:
Ca lucrurile pot fi actualizate periodic, trebuie doar să verificați site-ul lor, de asemenea,...