De twee statements doen in principe hetzelfde op het kern-API-niveau, namelijk de cursor ophalen en de resultaten transformeren. Er is echter één "kern" verschil over prestaties:
-
.forEach()
zal de cursorresultaten "één voor één" transformeren en de iteratorfunctie verwerken die het is verstrekt. -
.fetch()
aan de andere kant krijgt de "array" van de cursor "alles tegelijk", wat betekent dat het allemaal "in het geheugen" is in één klap.
Dus wat er ook gebeurt, geen van beide is eigenlijk "sneller" in het uitvoeren van de "kern" -bewerking van het ophalen van de cursor van de query. Het niet evalueren van een "expressie" bij elke iteratie van de cursor "kan" echter iets sneller zijn, dus .fetch()
zou hier een "beetje" kunnen winnen.
De grote vangst is natuurlijk "alles is nu in het geheugen", dus er is de "overhead" om dat te overwegen. Ook ten tijde van .fetch()
de _.each()
moet nog worden verwerkt, zoals het spreekwoord zegt. "Wat je "wint" op de schommels, "los" waarschijnlijk op de rotondes" .
Zonder volledige benchmarking van specifieke gevallen zullen de "timings" waarschijnlijk vergelijkbaar zijn. En generieke benchmarking is zo goed als nutteloos, tenzij het specifiek de omvang van de datasets waarmee u werkt, toepast.
Het algemene geval komt daarom uit, "Ongeveer hetzelfde" , Maar met behulp van .fetch()
gaat meer geheugen in beslag nemen dan gewoon een cursor vanaf het begin herhalen.