Koazee срещу Go-Funk срещу Go-Linq

Целта на тази статия е да предостави сравнително сравнение между Koazee и две от най-известните Golang рамки за работа с масиви: Go-Funk и Go-Linq.

Източници

  • Koazee: https://github.com/wesovilabs/koazee
  • Go-Linq: https://github.com/ahmetb/go-linq
  • Go-Funk: https://github.com/thoas/go-funk

Хранилището, използвано за създаване на сравнението на бенчмарка, може да се намери в моята организация Github, https://github.com/wesovilabs/koazee-comparison

сравнение

Тестовете за сравнение могат да се стартират от вашия собствен компютър, кодът може да бъде изтеглен от тук

За това сравнение бях фокусиран върху това как трите рамки се справят с масиви от примитивни типове.

Графиката по-долу показва как е ефективността на рамката за всеки тест:

Оста-y показва ns / op за операция, а ос-x различните тестове. Както можем да наблюдаваме, представянето в Koazee е много по-добро за всички сценарии.

Тестовете са описани по-долу:

  • Сума: Като се има предвид масив с 5000 случайни числа, трябва да намерим сумата на всичките му елементи.

Koazee: 18014 ns / op GoLinq: 239511 ns / op GoFunk: 2096351 ns / op

  • Дубликат: Като се има предвид масив с 5000 случайни числа, ние трябва да върнем друг масив, където всеки елемент е умножен по 2

Koazee: 28762 ns / op GoLinq: 456650 ns / op GoFunk: p1816872 ns / op

  • Обратна: Като се има предвид масив с 5000 случайни числа, ние трябва да обърнем последователностите на числата

Koazee: 21462 ns / op GoFunk: 167916 ns / op GoLinq: 503982 ns / op

Сортиране: Като имаме предвид масив с 5000 произволни числа, трябва да върнем масив с подредени възходящи подредени.

Коазее: 570380 GoLinq: 1882618 ns / оп

(*) Вероятно е моя вина, но не намерих начин да извърша това действие в GoFunk

Филтър: Имайки предвид масив с 5000 произволни, ще върнем масив само с нечетните елементи.

Koazee: 111382 ns / op GoLinq: 326412 ns / op GoFunk: 1748583 ns / op

Съдържа: Даден масив с 5000 случайни числа трябва да се върнем, ако елементът в последната позиция е намерен или не

Koazee: 3607 ns / op GoFunk: 248290 ns / op GoLinq: 107764 ns / op

Множество операции: Имайки предвид масив с 5000 произволни низа, ние трябва да извършим следните операции:

  • Сортирайте низовете във възходящ ред
  • Обърнете последователността на струните
  • Филтрирайте масива и изхвърлете онези думи, чийто len не е 4.
  • Преобразувайте масив от низ в масив от int, където новите елементи ще бъдат дължината на думата. (Очевидно всички елементи в новия масив ще бъдат 4 след прилагания филтър в предишната стъпка)
  • Обобщете всички елементи

Koazee: 2447864 ns / op GoLinq: 3096456 ns / оп

(*) GoFunk не предоставя начин за обединяване на операции

Conclussions

  • Koazee е най-младият, а наборът от предоставени операции е слаб. По принцип мина само един месец откакто започнах да го кодирам и през повечето време бях фокусиран върху подобряването на работата.
  • Ясно е, че представянето в Koazee е много по-добро.
Прилагането на нови операции е лесно, най-сложната част е да се направи по-добре от другите
  • Koazee е единственият, който ни предоставя грешката в случай, че нещо не работи както се очаква, направете го най-сигурната библиотека.
  • GoFunk не предоставя приятелски начин за обединяване на операции, както правят Koazee или GoLinq.
  • Koazee е единственото, което не ви принуждава да предавате функционални входове, докато определяте операциите си.
За бъдещо издание Koazee v0.0.3 бих искал да осигуря по-богат набор от операции над масиви. но винаги, като се фокусираме върху осигуряването на най-доброто представяне.

Ако проектът ви харесва, статията или просто смятате, че този проект заслужава да бъде подкрепен, наистина ще се радвам, ако го споделите в мрежите си, чуруликайте статията или звездата в хранилището в Github