2013-03-30 5 views
7

Mam benchmarkingowi dwie metody: pozycje tablicyDlaczego dostęp do właściwości obiektu jest zawsze szybszy niż w przypadku elementów tablicy?

dostępu

var object = [10, 15, 20]; 
var x = object[0]; 
var y = object[1]; 
var z = object[2]; 

i dostęp do właściwości obiektów

var object = { 
    x: 10, 
    y: 15, 
    z: 20 
}; 
var x = object.x; 
var y = object.y; 
var z = object.z; 

ja oczekiwane dostęp do elementów tablicy o wiele szybciej, ponieważ nie ma rozdzielczości nazw właściwości związanych z.

Jednak, ku mojemu zaskoczeniu, dostęp do właściwości obiektu był w przybliżeniu 30% szybszy we wszystkich przeglądarkach.

Chart [URL to benchmark]

To wyniki testów mnie zdezorientowany. Z jakiego powodu poprzednia metoda powinna być o wiele wolniejsza od tej drugiej?

+0

* „... ponieważ nie ma rozdzielczość Nazwa obiektu zaangażowany.” Co sprawia, że ​​myślisz, że nie ma rozdzielczość nazwa właściwości? Tablice są po prostu fantazyjnymi obiektami. Wskaźniki tablicowe są nazwami właściwości. –

+1

@amnotiam Zdrowy rozsądek z tła C. – caiosm1005

+0

Tak, z JavaScript czasami trzeba zostawić zdrowy rozsądek przy drzwiach. –

Odpowiedz

11

Uwzględniono tworzenie obiektu i tablicy w teście. Jeśli umieścisz że w kodzie inicjalizacji, różnica staje się bardzo mały:

http://jsperf.com/object-properties-and-array-items/2

+0

Rozumiem! Więc narzut musi pochodzić z tworzenia obiektu tablicy. Oznacza to, że utworzenie "[tablicy]" zajmuje więcej czasu niż zwykłego "[obiektu]", prawda? – caiosm1005

+1

@ caiosm1005: Tak, istnieje różnica w tworzeniu obiektu i tablicy, co nie jest tak zaskakujące, jak tablica jest obiektem, tylko specjalnym kodem do obsługi elementów z indeksami numerycznymi. – Guffa

+0

, więc możemy śmiało powiedzieć, że oba wymagają prawie tego samego czasu. – JerryGoyal

Powiązane problemy