Dlaczego ktoś wolałby bibliotekę narzędziową lodash.js lub underscore.js od drugiej?
Wydaje się, że Lodash zastępuje podkreślenie, które jest już dłuższe.
Myślę, że oba są genialne, ale nie wiem wystarczająco dużo o tym, jak działają, aby dokonać wykształconego porównania, i chciałbym dowiedzieć się więcej o różnicach.
underscore.js
javascript
lodash
Brian M. Hunt
źródło
źródło
lodash
iunderscore
są teraz w wątku scalającymOdpowiedzi:
Stworzyłem Lo-Dash, aby zapewnić bardziej spójną obsługę iteracji w różnych środowiskach dla tablic, ciągów, obiektów i
arguments
obiektów 1 . Od tego czasu stał się nadzbiorem Underscore, zapewniając bardziej spójne zachowanie API, więcej funkcji (takich jak wsparcie AMD, głęboki klon i głębokie scalanie), dokładniejszą dokumentację i testy jednostkowe (testy, które działają w Node, Ringo, Rhino, Narwhal, PhantomJS i przeglądarki), lepsza ogólna wydajność i optymalizacja dla dużych tablic / iteracji obiektów oraz większa elastyczność dzięki niestandardowym kompilacjom i narzędziom do wstępnej kompilacji szablonów.Ponieważ Lo-Dash jest aktualizowana częściej niż podkreślenia, o
lodash underscore
build jest do zapewnienia kompatybilności z najnowszą wersją stabilną od podkreślenia.W pewnym momencie dostałem nawet dostęp push do Underscore, częściowo dlatego, że Lo-Dash jest odpowiedzialny za podniesienie ponad 30 problemów; poprawki błędów lądowania, nowe funkcje i ulepszenia w Underscore v1.4.x +.
Ponadto istnieją co najmniej 3 płyty kotłowe szkieletowe, które domyślnie zawierają Lo-Dash, a Lo-Dash jest teraz wspomniany w oficjalnej dokumentacji Backbone .
Zapoznaj się z postem Kit Cambridge, powiedz „Hello” Lo-Dash , aby dowiedzieć się więcej o różnicach między Lo-Dash a Underscore.
Przypisy:
arguments
obiektów. W nowszych przeglądarkach metody Underscore ignorują dziury w tablicach , metody „Objects” iterująarguments
obiekty, łańcuchy są traktowane jak tablice, a metody poprawnie iterują funkcje (ignorując ich właściwość „prototypową”) i obiekty (iterujące właściwości shadow, takie jak „toString” i „valueOf”), podczas gdy w starszych przeglądarkach nie. Ponadto metody podkreślania, takie jak_.clone
zachowanie dziur w tablicach, podczas gdy inne_.flatten
nie.źródło
Lo-Dash został zainspirowany podkreśleniem, ale obecnie jest doskonałym rozwiązaniem. Możesz tworzyć własne kompilacje , mieć wyższą wydajność , wspierać AMD i mieć wspaniałe dodatkowe funkcje . Sprawdź testy porównawcze Lo-Dash vs. Underscore na jsperf i .. ten niesamowity post o lo-dash :
Jedną z najbardziej przydatnych funkcji podczas pracy ze zbiorami jest skrócona składnia:
(wzięte z dokumentów Lodash )
źródło
filter
funkcja w podkreśleniu z 2012 github.com/jashkenas/underscore/issues/648 (nazywa sięwhere
)Jeśli podobnie jak ja spodziewałeś się listy różnic w użyciu między podkreślnikiem a lodash, istnieje przewodnik dotyczący migracji z podkreślenia do lodash .
Oto jego obecny stan dla potomności:
źródło
Oprócz odpowiedzi Johna i czytania o lodash (które do tej pory uważałem za „ja też”, aby podkreślić), a także sprawdzanie wydajności, czytanie kodu źródłowego i postów na blogu , kilka punktów, które sprawiają, że lodash znacznie lepsze niż podkreślenia są:
Nie chodzi o prędkość, ponieważ chodzi o spójność prędkości (?)
te dodatki w lodash są również bardzo użyteczne.
Oto lista różnic między lodash, a jego kompilacja podkreślenia zastępuje twoje projekty podkreślania.
źródło
Jest rok 2014 i kilka lat za późno. Mimo to myślę, że moja uwaga dotyczy:
IMHO ta dyskusja dość mocno wyleciała z proporcji. Cytując wyżej wspomniany post na blogu :
Jakby „proste pętle” i „waniliowe Javascript” były bardziej natywne niż implementacje metod Array lub Object. Jezu ...
Z pewnością byłoby miło mieć jedno źródło prawdy, ale tak nie jest. Nawet jeśli powiedziano ci inaczej, nie ma Boga Waniliowego, moja droga. Przepraszam. Jedynym prawdziwym założeniem jest to, że wszyscy piszemy kod JavaScript, który ma na celu osiąganie dobrych wyników we wszystkich głównych przeglądarkach, wiedząc, że wszystkie mają różne implementacje tych samych rzeczy. To dziwka, z którą trzeba sobie poradzić, delikatnie mówiąc. Ale to jest przesłanka, czy ci się to podoba, czy nie.
Być może wszyscy pracują nad projektami na dużą skalę, które wymagają twitterowej wydajności, aby naprawdę zobaczyć różnicę między 850 000 (podkreślenie) a 2 500 000 (lodash) iteracji na liście na sekundę teraz!
Ja nie jestem. To znaczy pracowałem nad projektami, w których musiałem zająć się problemami z wydajnością, ale nigdy nie zostały one rozwiązane ani spowodowane ani przez podkreślenie, ani przez Lo-Dash. I dopóki nie zrozumiem prawdziwych różnic w implementacji i wydajności (mówimy teraz o C ++), powiedzmy, że istnieje pętla nad iterowalnym (obiekt lub tablica, rzadka lub nie!), Raczej nie przeszkadza mi żadna roszczenia oparte na wynikach platformy porównawczej, która jest już opiniowana .
Potrzebuje tylko jednej aktualizacji, powiedzmy Rhino, aby podpalić implementacje metody Array w taki sposób, aby żadna „średniowieczna metoda pętli nie działała lepiej i na zawsze, a kapłan nie może się kłócić o prosty fakt, że wszystkie nagłe metody tablicowe w FF są znacznie szybsze niż jego / jej zdaniem pieprzony mózg. Człowieku, nie możesz oszukiwać środowiska wykonawczego, oszukując środowisko wykonawcze! Pomyśl o tym, promując ...
... następnym razem.
Aby zachować aktualność:
Wybierz podejście, które najbardziej odpowiada Twoim potrzebom. Jak zwykle. Wolę w każdej chwili wycofywanie się z rzeczywistych wdrożeń niż wyrażanie oszustw w czasie wykonywania, ale nawet to wydaje się obecnie kwestią gustu. Trzymaj się wysokiej jakości zasobów, takich jak http://developer.mozilla.com i http://caniuse.com, a wszystko będzie dobrze.
źródło
Array.from
, prawdopodobnie nawet nie wiedzieliby, co powinien zrobić. Ludzie z „paskiem użytkowym” JS wydają się tak bardzo zainteresowani promowaniem swoich tak bardzo genialnych obejść, że zapominają, że robiąc to, faktycznie osłabiają proces standaryzacji. Brak potrzebnych funkcji nie powoduje presji na „producentów” przeglądarki. Ciekawostka: 2 z 4 głównych przeglądarek są oparte na projektach typu open source ( 1 , 2 ).Zgadzam się z większością rzeczy tutaj powiedzianych, ale chcę jedynie wskazać argument na korzyść underscore.js: rozmiar biblioteki.
Szczególnie w przypadku tworzenia aplikacji lub strony internetowej, które mają być używane głównie na urządzeniach mobilnych, rozmiar wynikowego pakietu i wpływ na czas uruchamiania lub pobierania mogą odgrywać ważną rolę.
Dla porównania, te rozmiary to te, które zauważyłem w Eksploratorze map źródłowych po uruchomieniu serwera jonowego:
zredagowano lut 2020 :
można użyć BundlePhobia, aby sprawdzić aktualny rozmiar Lo-Dash i Underscore
źródło
source-map-explorer after running ionic serve
Nie jestem pewien, czy to właśnie oznaczało OP, ale natknąłem się na to pytanie, ponieważ szukałem listy problemów, o których muszę pamiętać przy migracji z podkreślenia do lodash.
Byłbym bardzo wdzięczny, gdyby ktoś opublikował artykuł z pełną listą takich różnic. Zacznę od rzeczy, których nauczyłem się na własnej skórze (tj. Rzeczy, które spowodowały, że mój kod eksplodował podczas produkcji: /):
_.flatten
w podkreśleniu jest domyślnie głęboki i musisz przekazać true jako drugi argument, aby był płytki. W lodash jest on domyślnie płytki i przekazanie go jako drugiego argumentu spowoduje, że będzie on głęboki! :)_.last
w podkreśleniu akceptuje drugi argument, który mówi, ile elementów chcesz. Wlodash
nie ma takiej opcji. Możesz to naśladować.slice
_.first
(ten sam problem)_.template
w podkreśleniu można używać na wiele sposobów, jednym z nich jest dostarczenie ciągu szablonu i danych orazHTML
powrót (lub przynajmniej tak to działało jakiś czas temu). Wlodash
otrzymujesz funkcję, którą powinieneś następnie karmić danymi._(something).map(foo)
działa w podkreśleniu, ale w lodash musiałem go przepisać_.map(something,foo)
. Być może była to tylkoTypeScript
kwestiaźródło
_(something).map(foo).value()
.http://benmccormick.org/2014/11/12/underscore-vs-lodash/
Najnowszy artykuł porównujący dwa autorstwa Bena McCormicka:
źródło
Właśnie znalazłem jedną różnicę, która okazała się dla mnie ważna. Wersja Lodash,
_.extend()
która nie jest kompatybilna z podkreśleniem, nie kopiuje właściwości lub metod zdefiniowanych na poziomie klasy.Stworzyłem test Jasmine w CoffeeScript, który pokazuje to:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
Na szczęście
lodash.underscore.js
zachowuje zachowanie Underscore polegające na kopiowaniu wszystkiego, co w mojej sytuacji było zachowaniem pożądanym.źródło
lodash ma
_.mapValues()
to samo co undrescore_.mapObject()
.źródło
W przeważającej części podkreślenie stanowi podzbiór lodash. Czasami, podobnie jak obecnie podkreślenie, będzie miało fajne małe funkcje, które lodash nie ma jak mapObject. Ten zaoszczędził mi dużo czasu na rozwój mojego projektu.
źródło
Są do siebie bardzo podobne, a Lodash przejmuje ...
Obie są biblioteką narzędzi, która zabiera świat narzędzi w JavaScript ...
Wygląda na to, że Lodash jest teraz regularnie aktualizowany, więc częściej wykorzystywany w najnowszych projektach ...
Również Lodash wydaje się lżejszy przez kilka KB ...
Oba mają dobre API i dokumentację, ale myślę, że Lodash jest lepszy ...
Oto zrzut ekranu dla każdego dokumentu w celu uzyskania pierwszej wartości tablicy ...
podkreślać:
lodash:
Ponieważ od czasu do czasu rzeczy mogą się aktualizować, po prostu sprawdź ich stronę internetową ...
lodash
podkreślać
źródło