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
_.anyis Lodash_.some - Underscore
_.composeis Lodash_.flowRight - Underscore
_.containsis Lodash_.includes - Underscore
_.eachdoesn’t allow exiting by returningfalse - Underscore
_.findWhereis Lodash_.find - Underscore
_.flattenis deep by default while Lodash is shallow - Underscore
_.indexByis Lodash_.keyBy - Underscore
_.invokeis Lodash_.invokeMap - Underscore
_.mapObjectis Lodash_.mapValues - Underscore
_.maxcombines Lodash_.max&_.maxBy - Underscore
_.mincombines Lodash_.min&_.minBy - Underscore
_.objectis Lodash_.zipObject - Underscore
_.pairsis Lodash_.toPairs - Underscore
_.pluckis Lodash_.map - Underscore
_.uniqby aniterateeis Lodash_.uniqBy - Underscore
_.whereis 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.


