9

Questa è una domanda piuttosto accademica. Mi chiedo come viene implementato il browser come in quale struttura dati o algoritmo viene utilizzato per mappare un selettore CSS su un particolare elemento DOM. È realizzato attraverso una tabella hash? In che modo il nodo figlio DOM sa che lo stile applicato al genitore si applica anche a se stesso, ecc. Sto guardando il centro per sviluppatori Mozilla e non ho trovato nulla. Qualunque documentazione o libro sull'argomento sarebbe molto apprezzato ... grazie!Come vengono implementati CSS e DOM nel browser?

risposta

9

Domande di risposta alle corrispondenze "quali selettori corrispondono al nodo dato", non "quali nodi corrispondono a un selettore". Ciò consente di valutare semplicemente ciascuna parte di un selettore rispetto al nodo corrente (confronta nome nodo/ID/classe). Il combinatore e l'ereditarietà decendenti vengono eseguiti mediante la scansione dei nodi principali.

Se siete interessati cosa succede dopo, WebKit blog aveva belle serie: WebCore rendering basics

1

Lei parla di Mozilla. È certamente più facile rispondere alla tua domanda nel contesto di una particolare implementazione concreta, piuttosto che la nozione astratta di tutte le possibili implementazioni.

[W] la struttura o l'algoritmo dei dati del cappello è utilizzato per associare un selettore CSS a un particolare elemento DOM ... è realizzato tramite una tabella hash?

Suppongo che la risposta diretta alla sua domanda, per FF2, è probabile che sia in style directory del codice sorgente di Firefox. Una ricerca all'interno di quella directory per "hashtable" produce 111 risultati in 7 file.

Sono sicuro che gli hashtables sono ampiamente associati con alcuni dei processi coinvolti nel rendering degli stili CSS.

Quindi la risposta breve alla tua domanda è "Sì, ma c'è molto di più che solo tabelle hash".

2

Così qui sono i documenti scarse:

Dalla tua domanda, sembra che si dovrebbe prima imparare di più su come CSS dovrebbe funzionare (ad esempio quello che è specificità delle regole, stile calcolato).

+1

Sono molto consapevole di come CSS funziona per quanto riguarda governare specificità, stile calcolato. Ero interessato ai reali dettagli di implementazione dei motori di rendering. La tua risposta non fa luce in questo aspetto. – Jlam

+0

@Jlam: Grazie per essere tornato dopo 3,5 anni per dirmelo! Mi dispiace se ti ho offeso, ma la tua domanda non lo ha chiarito e devi davvero conoscere i CSS prima di addentrarti nell'implementazione. FWIW, ho imparato le basi su come funzionava il sistema di stile di mozilla leggendo attraverso quelle pagine e poi attraverso l'implementazione collegata nella risposta di Ewan. – Nickolay