2012-05-04 14 views
7

Supponendo che non vi siano ottimizzazioni pazzesche (sto guardando Chrome).Qual è la complessità temporale delle ricerche HTML DOM

Sto parlando di raw, brutto, non-rotto-non-aggiustarlo, vale a dire v6 javascript, costo.

Il limite essere inferiore:

document.getElementById() 

Versus:

document.getElementsByTagName('div') lookup. 
+0

Se stai ottimizzando per IE 6, ti esorto a riconsiderare la parte 'ain't-broke'. – robrich

+0

@robrich Non sto ottimizzando nulla. Solo curioso. Pensavo che l'ie6 avrebbe segnato il sarcasmo dietro "non rotto". Forse dovrei "citarlo in aereo" per chiarezza. –

risposta

9

getElementById può tranquillamente presumere di essere O(1) in un browser moderno come una tabella hash è la struttura di dati ideale per il id => mapping degli elementi.

Senza alcuna ottimizzazione qualsiasi semplice query, che si tratti di un selettore di CSS, di una ricerca di ID, di una classe o di un nome di tag, non è peggiore di O(n) poiché un'iterazione su tutti gli elementi è sempre sufficiente.

Tuttavia, in un buon browser mi aspetterei che avesse un tagname => mapping degli elementi, quindi getElementsByTagName sarebbe O(1).

+0

e senza alcuna ottimizzazione getElementsByTagName dovrà essere O (n) anche nel migliore dei casi dato che l'ultimo elemento potrebbe essere quello che stai cercando –

+0

Quindi, questo significa che i browser mappano più viste per ogni tag in scrittura per massimizzare la velocità di lettura ? Non sarebbe un po 'più intensivo di memoria? –

+0

L'utilizzo della memoria di tali mapping sarebbe irrilevante. Sarebbe molto meno di, ad es. una singola immagine (come un'immagine di sfondo su un sito Web) memorizzata nella cache. – ThiefMaster

Problemi correlati