Szybkie iteracje czyli przyspieszanie pętli

keemor~24 czerwca 2009 /Javascript

We wpisie Wydajne tworzenie elementów DOM C.D. pisałem o szybkim sposobie tworzenia elementów DOM w pętli. Zainspirowany częścią prezentacji Nicholasa Zakasa Speed Up Your JavaScript dotyczącą pętli przedstawie sposoby wydajnego iterowania po elementach.
Specyfikacja ecma-262, 3. edycja z grudnia 1999 roku wprowadza cztery rodzaje pętli: for, do-while, while oraz for-in.
Trzy pierwsze pętle służą do iteracji po listach, których klucze są kolejnymi liczbami całkowitymi zaczynając od 0.
For-in natomiast jest stworzony do przebiegania po tablicach asocjacyjnych, których klucze są łańcuchami znakowymi. Konstrukcja:

for (var key in arr) {
    arr[key];
}

w zmiennej key zwraca klucz i nie będę jej omawiać ze względu na niską wydajność.

Co jest ważne?

Dwa najważniejsze czynniki wpływające na prędkość pętli do ilość operacji w każdym przebiegu oraz liczba iteracji.

Czego unikać?

Jeżeli zależy nam na wydajności trzeba unikać metod iterujących dostępnych w popularnych frameworkach:

Rozpatrzymy tablice values z pół milionem elementów.

var values = new Array(500000);
values.each(function(v){
})

Iteracja za pomocą metody each frameworku Prototype tworzy za każdym razem funkcję i jest wolniejsza od natywnych konstrukcji JavaScript około osiem razy we wszystkich przeglądarkach.

Podstawowa iteracja za pomocą trzech konstrukcji wygląda tak:

for (var i=0; ilen na początku pętli:

var len=values.length;

for (var i=0; i

  • each z Prototype
  • do { } while podstawowe
  • do { } while z wyliczoną wcześniej liczbą elementów
  • do { } while z iteracją od końca do początku
  • Wyniki prędkości pętli

    Dodaj komentarz