Spíše z důvodu učení se, než kvůli faktickému testování něčeho, co asi ani nevypadá moc reálně, jsem si zkusil napsat stejný kód v několika jazycích. Konkrétně v NodeJS, Pyhonu a Go. Jak jde vidět vše jazyky používané pro psaní na backendu webových aplikací.
Zadání
Asi jednoduché a jasné: napsat stejný kód v růyných jazycích, něco se naučit a možná pak i porovnat nějaký performance. Ten stejný kód jsem omezil na načtení dat z MongoDB databáze, sečtení načtených dat, výpočet průměrné hodnoty z načtených dat a její zobrazení.
Data jsem si připravil v NodeJS jednoduchým skriptem, který vytvoří testovací data pro jednotlivé aplikace v daném jazyce.
Vytvoření databáze
NIc složitého:
Výsledkem je collection v MongoDB c 1.000.000 záznamy, dokumenty, kde v kadém z nich je klíč value s nahédně vygenerovaným číslem v rozmezí od 1 do 100.
Vytvoření databáze:
Samotné testování
Postupně jsem napsal ten stejný kód v růyných jazycích s podobnou myšlenkou, složitostí, bez ambice využívat jakékoliv optimalizační aspekty.
NodeJS
Rychlost pak takto:
Poznámka k práci s výsledným polem: zkusil jsem jak for of
, tak i klasický for
cyklus, ale i funkcionální forEach
. Výsledek byl téměř identický. Použitý for of
se mi nejvíce líbil, pro svou jasnost a kompaktnost.
Python
No a rychlost v Pythonu pak takto:
Go
Rychlost vývpočtu v Go:
Suma sumarum
Rychlost jedntolivých implementací stojí a padá na Mongo driveru a je v podstatě ve všech jazycích stejná. I když v NodeJS test dopadl nejlépe. Problém bych ale neviděl v daném jazyce, ale spíš v loaderu.
To potvrzuje ten fakt, že pokud jsem vybuildoval Go zdroják do binárky, pak jsem získal a pomohl jsem si o cca půl sekundy a Go tak skoro srovnalo krok s ostatními:
Nicméně
Jak jsem uveld úplně ze začátku článku: psal jsem test, abych si vyzkoušel v růyných jazycích práci s MongoDB.
Co mě mile překvpilo, byla rychlost Pythonu. Čekal jsem, že bude výrazně pomalejší.
O to milejší překvapení, když se podíváte na pythonovský zdroják a porovnáte jej s ostatními jazyky…
A samozřejmě: určitě jsem neměl ambice testovat jazyky. Chtěl jsem získat nějaké nové zkušenosti…