Underscore vs. Lodash, czyli szybkie porównanie bibliotek
Tworząc stronę opartą głównie o frontend i jakiś zbiór danych często zadajemy sobie pytanie jakiej biblioteki użyć, by obrobić dane. Javascript to język działającym (prawie) wyłącznie po stronie klienta w przeglądarce. Dzisiaj postaram się po krótce przybliżyć dwie znane biblioteki służące do obróbki zbioru danych.
Tworząc stronę opartą głównie o frontend i jakiś zbiór danych często zadajemy sobie pytanie jakiej biblioteki użyć, by obrobić dane. Javascript to język działającym (prawie) wyłącznie po stronie klienta w przeglądarce. Dzisiaj postaram się po krótce przybliżyć dwie znane biblioteki służące do obróbki zbioru danych.
Wprowadzenie
Stojąc przed wyborem między biblioteką Underscore JS a Lodash, mamy nieco problem. Wyjaśnienie jest raczej proste – obie robią praktycznie to samo i w bardzo podobny sposób. Zatem czym się różnią?
Pierwsze spojrzenie
Obie biblioteki są (wg. autorów) maksymalnie zoptymalizowane, co pokazują rozmiary produkcyjnych wersji (stan na dzień 12.04.2017), odpowiednio Underscore (5,7kb) i Lodash (4kb) – oczywiście wersje po minifikacji i kompresji gzip.
Przejdźmy do pierwszego przykładu, dla funkcji szukającej konkretnej wartości w kolekcji:
Underscore
_.findWhere(data, {title: "Example title"});
Lodash
_.find(data, {title: "Example title"});
Jak widać różnica jest kosmetyczna, jedynie w nazwie. Obie biblioteki zwrócą obiekt w takiej samej formie.
Drugi przykład, tym razem operujący na tablicy – pobierzemy różnice między dwoma tablicami:
Underscore
_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
Lodash
_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
W powyższym przykładzie zwrócone dane zarówno dla Underscore, jak i dla Lodash będą identyczne, tak samo jak sposób ich pobierania. Obie zwrócą taką samą tablicę zawierającą różnice w dwóch tablicach.
Przykładowe funkcje odpowiadające obu bibliotekom
- Underscore
_.any
is Lodash_.some
- Underscore
_.compose
is Lodash_.flowRight
- Underscore
_.contains
is Lodash_.includes
- Underscore
_.each
doesn’t allow exiting by returningfalse
- Underscore
_.findWhere
is Lodash_.find
- Underscore
_.flatten
is deep by default while Lodash is shallow - Underscore
_.indexBy
is Lodash_.keyBy
- Underscore
_.invoke
is Lodash_.invokeMap
- Underscore
_.mapObject
is Lodash_.mapValues
- Underscore
_.max
combines Lodash_.max
&_.maxBy
- Underscore
_.min
combines Lodash_.min
&_.minBy
- Underscore
_.object
is Lodash_.zipObject
- Underscore
_.pairs
is Lodash_.toPairs
- Underscore
_.pluck
is Lodash_.map
- Underscore
_.uniq
by aniteratee
is Lodash_.uniqBy
- Underscore
_.where
is Lodash_.filter
Źródło: Link
Podsumowanie
Oczywiście chcąc dokładniej porównać obie biblioteki należałoby zbadać każdą funkcję, jednak większość z nich robi to samo, nazywa się bardzo podobnie (jak nie tak samo). Różnice mogłyby się pojawić w dziesiątych lub nawet setnych częściach sekund, jeśli chodzi o czas wykonywania poszczególnych funkcji operujących na dużo większych zestawach danych. Obie biblioteki podają przejrzyste dokumentacje z szybkimi wyszukiwarkami metod.
Podzielcie się w komentarzach waszymi doświadczeniami związanymi z Underscore lub Lodash.