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.

Underscore vs. Lodash, czyli szybkie porównanie bibliotek

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 returning false
  • 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 an iteratee 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 podadają przejrzyste dokumentacje z szybkimi wyszukiwarkami metod.

Podzielcie się w komentarzach waszymi doświadczeniami związanymi z Underscore lub Lodash.

Powiadomienie cookies

Strona lukaszbacik.pl zapisuje pliki cookies na komputerach odwiedzających ją internautów. Czytaj więcej.