Les deux instructions font fondamentalement la même chose au niveau de l'API principale, c'est-à-dire obtenir le curseur et transformer les résultats. Il existe cependant une différence "essentielle" concernant les performances :
-
.forEach()
transformera les résultats du curseur "un à la fois" et traitera la fonction d'itération qui lui est fournie. -
.fetch()
d'autre part obtient le "tableau" du curseur "tout à la fois" ce qui signifie que tout est "en mémoire" en un seul coup.
Donc quoi qu'il en soit, ni l'un ni l'autre n'est réellement "plus rapide" pour effectuer l'opération "de base" d'extraction à partir du curseur de la requête. Cependant, ne pas évaluer une "expression" à chaque itération du curseur "peut être" légèrement plus rapide, donc .fetch()
pourrait gagner un "petit" ici.
Le gros hic, bien sûr, c'est que "tout est maintenant en mémoire", il y a donc le "overhead" de le faire à prendre en compte. De plus, au moment de .fetch()
le _.each()
n'a pas encore été traitée, comme dit le proverbe. "Ce que vous "gagnez" sur les balançoires, vous le "perdez" probablement sur les ronds-points" .
Sans analyse comparative complète des cas spécifiques, les "timings" sont susceptibles d'être similaires. Et l'analyse comparative générique est presque inutile à moins qu'elle applique spécifiquement la taille des ensembles de données avec lesquels vous travaillez.
Le cas général ressort donc, "A peu près pareil" , Cependant en utilisant .fetch()
va consommer plus de mémoire que de simplement itérer un curseur depuis le début.