Wydajność związana z tablicami i obiektami w JavaScript (zwłaszcza Google V8) byłaby bardzo interesująca do udokumentowania. Nigdzie w Internecie nie znalazłem wyczerpującego artykułu na ten temat.
Rozumiem, że niektóre obiekty używają klas jako podstawowej struktury danych. Jeśli właściwości jest dużo, czasami jest to traktowane jako tablica mieszająca?
Rozumiem również, że tablice są czasami traktowane jak tablice C ++ (tj. Szybkie losowe indeksowanie, powolne usuwanie i zmiana rozmiaru). Innym razem są traktowane bardziej jak Obiekty (szybkie indeksowanie, szybkie wstawianie / usuwanie, więcej pamięci). A może czasami są przechowywane jako połączone listy (tj. Powolne losowe indeksowanie, szybkie usuwanie / wstawianie na początku / końcu)
Jaka jest dokładna wydajność pobierania i manipulowania tablicami / obiektami w JavaScript? (specjalnie dla Google V8)
A dokładniej, jaki jest wpływ na wydajność:
- Dodawanie właściwości do obiektu
- Usuwanie właściwości z obiektu
- Indeksowanie właściwości w obiekcie
- Dodawanie elementu do tablicy
- Usuwanie elementu z tablicy
- Indeksowanie elementu w tablicy
- Wywołanie Array.pop ()
- Wywołanie Array.push ()
- Wywołanie Array.shift ()
- Wywołanie Array.unshift ()
- Wywołanie Array.slice ()
Wszelkie artykuły lub linki zawierające więcej szczegółów również będą mile widziane. :)
EDYCJA: Naprawdę zastanawiam się, jak tablice i obiekty JavaScript działają pod maską. Ponadto w jakim kontekście silnik V8 „wie” o „przełączeniu” na inną strukturę danych?
Na przykład załóżmy, że tworzę tablicę z ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
Co tu się naprawdę dzieje?
Albo ... co z tym ... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
}
W przypadku konwencjonalnych tablic wydajność byłaby straszna; podczas gdy jeśli użyto LinkedList ... nie jest tak źle.