Te dwie instrukcje robią w zasadzie to samo na podstawowym poziomie interfejsu API, czyli pobierają kursor i przekształcają wyniki. Istnieje jednak jedna „podstawowa” różnica w wydajności:
-
.forEach()
przekształci wyniki kursora „jeden na raz” i przetworzy dostarczoną funkcję iteratora. -
.fetch()
z drugiej strony pobiera "tablicę" z kursora "wszystko na raz", co oznacza, że wszystko jest "w pamięci" za jednym uderzeniem.
Więc bez względu na wszystko, tak naprawdę nie jest "szybsze" w wykonywaniu "podstawowej" operacji pobierania z kursora zapytania. Jednak brak oceny „wyrażenia” w każdej iteracji kursora „może być” nieco szybszy, więc .fetch()
może wygrać tutaj „trochę”.
Wielkim haczykiem jest oczywiście to, że „wszystko jest już w pamięci”, więc trzeba to rozważyć. Również w czasie .fetch()
_.each()
jest jeszcze do przetworzenia, jak to się mówi. „Co „zyskasz” na huśtawkach, które prawdopodobnie „tracisz” na rondach” .
Bez pełnej analizy porównawczej konkretnych przypadków „czasy” będą prawdopodobnie podobne. A ogólny benchmarking jest prawie bezużyteczny, chyba że dotyczy konkretnie rozmiaru zestawów danych, z którymi pracujesz.
W związku z tym wychodzi ogólny przypadek, „O tym samym” , Jednak używając .fetch()
zużyje więcej pamięci niż tylko iterowanie kursora od początku.