Koazee vs Go-Funk vs Go-Linq

Selle artikli eesmärk on anda võrdlusalus Koazee ja kahe kõige tuntuma Golangi raamistiku vahel töötamiseks massiividega: Go-Funk ja Go-Linq.

Allikad

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

Võrdlusvõrdluse loomiseks kasutatud hoidla leiate minu Githubi organisatsiooni veebisaidilt https://github.com/wesovilabs/koazee-comparison

Võrdlus

Võrdlusteste saab läbi viia oma arvutist, koodi saab siit alla laadida

Selle võrdluse jaoks olen keskendunud sellele, kuidas 3 raamistikku käsitlevad primitiivsete tüüpide massiive.

Allolev graafik näitab, kuidas on iga testi raamistiku toimivus:

Telg-y näitab ns / op operatsiooni kohta ja telg-x erinevaid teste. Nagu võime täheldada, on Koazee etendus kõigi stsenaariumide jaoks palju parem.

Katseid kirjeldatakse allpool:

  • Summa: Arvestades 5000 juhusliku arvuga massiivi, peame leidma kõigi selle elementide summa.

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

  • Duplikaat: Arvestades 5000 juhusliku arvuga massiivi, peame tagastama veel ühe massiivi, kus iga element on korrutatud 2-ga

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

  • Tagurpidi: 5000 juhusliku arvuga massiivi korral peame numbrite jadad tagurdama

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

Sort: Arvestades 5000 juhusliku arvuga massiivi, peame tagastama massiivi, mille elemendid on kasvavalt järjestatud.

Koazee: 570380 GoLinq: 1882618 ns / op

(*) Tõenäoliselt on see minu süü, kuid ma ei leidnud võimalust selle toimingu tegemiseks GoFunkis

Filtreeri: Kui massiiv koosneb 5000 juhuslikust, saadame massiivi ainult paaritu elementidega.

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

Sisaldab: Arvestades 5000 juhusliku arvuga massiivi, peame tagasi pöörduma, kui element viimases positsioonis leitakse või mitte

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

Mitu toimingut: Arvestades 5000 juhusliku stringiga massiivi, peame tegema järgmised toimingud:

  • Sorteeri stringid kasvavalt
  • Keerake keelte järjestus ümber
  • Filtreerige massiiv ja visake ära need sõnad, mille len pole 4.
  • Teisendage massiivi string massiiviks int, kus uuteks elementideks on sõna pikkus. (Ilmselt on uue massiivi kõik elemendid 4 pärast eelmises etapis rakendatud filtrit)
  • Pange kõik elemendid kokku

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

(*) GoFunk ei paku võimalust toimingute ühendamiseks

Järeldused

  • Koazee on noorim ja pakutavate toimingute komplekt on kehv. Põhimõtteliselt on selle kodeerimisega alustamisest möödas vaid üks kuu ja enamasti olen keskendunud jõudluse parandamisele.
  • On selge, et Koazees on jõudlus palju parem.
Uute toimingute rakendamine on lihtne, teistega paremini hakkama saamine on kõige keerulisem osa
  • Koazee on ainus, mis pakub meile tõrke juhuks, kui miski ei töötanud ootuspäraselt, tehke sellest kõige ohutum teegi.
  • GoFunk ei paku sõbralikku viisi toimingute ühendamiseks, nagu seda teevad Koazee või GoLinq.
  • Koazee on ainus, mis ei sunni teid toimingute määratlemisel funktsioonisisendite üle andma.
Tulevase väljaande Koazee v0.0.3 jaoks sooviksin mahukamate toimingute komplekti pakkuda. kuid alati, keskendudes parima jõudluse pakkumisele.

Kui teile meeldib projekt, artikkel või kui arvate, et see projekt väärib toetamist, siis oleksin väga tänulik, kui jagate seda oma võrkudes, säutsite artiklit või tähistate Githubis asuvat hoidlat