Tyto dva příkazy dělají v podstatě totéž na základní úrovni API, což je získání kurzoru a transformace výsledků. Existuje však jeden „základní“ rozdíl ve výkonu:
-
.forEach()
transformuje výsledky kurzoru "po jednom" a zpracuje funkci iterátoru, kterou poskytuje. -
.fetch()
na druhou stranu získá „pole“ z kurzoru „všechno najednou“, což znamená, že je vše „v paměti“ jedním zásahem.
Takže bez ohledu na to, ani jedno není ve skutečnosti „rychlejší“ při provádění „základní“ operace načítání z kurzoru dotazu. Nevyhodnocování „výrazu“ při každé iteraci kurzoru však „může být“ o něco rychlejší, takže .fetch()
tady by mohl "trochu" vyhrát.
Velkým velkým úlovkem je samozřejmě „všechno je nyní v paměti“, takže je třeba zvážit „režii“ tohoto provedení. Stejně tak v době .fetch()
_.each()
se teprve musí zpracovat, jak se říká. „Co „získáte“ na houpačkách, pravděpodobně „ztratíte“ na kruhových objezdech“ .
Bez úplného srovnávání konkrétních případů bude „načasování“ pravděpodobně podobné. A generický benchmarking je téměř k ničemu, pokud konkrétně neaplikuje velikost datových sad, se kterými pracujete.
Vychází tedy obecný případ, "Zhruba stejně" , Nicméně pomocí .fetch()
spotřebovává více paměti než pouhé opakování kurzoru od začátku.