2つのステートメントは、コアAPIレベルで基本的に同じことを実行します。つまり、カーソルを取得して結果を変換します。ただし、パフォーマンスには「コア」の違いが1つあります。
-
.forEach()
カーソルの結果を「一度に1つずつ」変換し、提供されているイテレータ関数を処理します。 -
.fetch()
一方、カーソルから「配列」を「一度に」取得します。これは、1回のヒットですべてが「メモリ内」にあることを意味します。
したがって、何があっても、クエリのカーソルからフェッチする「コア」操作を実際に実行するのはどちらも「高速」ではありません。ただし、各カーソル反復で「式」を評価しないと、「わずかに速くなる可能性がある」ため、.fetch()
ここで「少し」勝つかもしれません。
もちろん、大きな問題は「すべてがメモリ内にある」ことです。そのため、それを行うことの「オーバーヘッド」を考慮する必要があります。また、.fetch()
の時点で _.each()
ことわざにあるように、まだ処理されていません。 「ラウンドアバウトで「緩む」可能性が高いブランコで「得る」もの 。
特定のケースの完全なベンチマークがなければ、「タイミング」は類似している可能性があります。また、一般的なベンチマークは、使用しているデータセットのサイズを具体的に適用しない限り、ほとんど役に立ちません。
したがって、一般的なケースが出てきます。「ほぼ同じ」 、ただし、.fetch()
を使用する より多くのメモリを消費します 最初からカーソルを繰り返すだけではありません。