Quelques précisions sur le DOM


25

J'ai essayé de comprendre le DOM, et même si j'ai une bonne idée de ce que c'est, il y a certaines idées que je ne peux tout simplement pas cerner. Je vais énumérer ce que je pense que le DOM est et mes questions seront en ligne.

  1. Le DOM est une représentation entièrement orientée objet de la page Web. Le standard DOM W3C constitue la base du DOM implémenté dans la plupart des navigateurs modernes.

    Le DOM parle-t-il donc de la façon dont un document XML / HTML est représenté comme un modèle d'objet?

  2. Le DOM ne spécifie pas que les documents doivent être implémentés comme un arbre ou un bosquet, ni ne spécifie comment les relations entre les objets doivent être implémentées.

    De quelles autres manières le document peut-il être représenté?

  3. Lorsque vous faites quelque chose comme ça -

    document.write('welcome to my home page!');

    l'objet document est fourni par le DOM. Les méthodes d'écriture sont les interfaces qui sont exposées à JavaScript par le DOM.

    Ainsi, les objets et ses méthodes sont créés en tant qu'objets JavaScript par l'analyseur DOM et ensuite présentés au moteur JavaScript? Ou les objets et les méthodes du moteur d'analyse DOM sont-ils dans leur propre langue maternelle? Et est exposé au moteur JavaScript? Si tel est le cas, alors qui est responsable de la traduction de JavaScript vers la langue maternelle?

  4. Que sont les liaisons linguistiques?

    La liaison de langage est l'ensemble d'objets natifs du langage en question qui implémente chacune des interfaces dans la spécification DOM.

    Les développeurs peuvent créer des liaisons de langage du DOM vers leur langue en suivant simplement l'IDL (Interface Definition Language) dans la spécification DOM.

    Donc, si le moteur d'analyse DOM est implémenté en C ++, cela signifie-t-il que lorsque vous créez des liaisons de langage en suivant l'IDL, vous créez simplement des objets dans le langage spécifique, c'est-à-dire C ++ avec lequel votre moteur d'analyse DOM est construit?


@apsillers Cela aurait dû être "Le DOM parle-t-il de la façon dont un document XML / HTML est représenté comme un modèle d'objet?" J'ai édité le post.
user1720897

Je répondrai à ce que je peux dans les commentaires. 3 et 4 peuvent prendre quelqu'un qui développe des navigateurs pour vraiment répondre et je ne veux pas affecter le nombre de réponses. 1 - le navigateur a une compréhension de l'état actuel du document, vous pouvez appeler cela le DOM, alternativement vous pouvez appeler le DOM les interfaces standard qu'il expose qui vous permettent d'interroger et de modifier l'état du document.
George Mauer du

2 - La déclaration concerne la mise en œuvre, pas la représentation. Sauf erreur, la «représentation» doit être un arbre. L'implémentation en arrière-plan ne fonctionne pas.
George Mauer

Réponses:


19

Ce qui suit est ma meilleure lecture des spécifications et références pertinentes. (J'ai trouvé les résumés de Mozilla sur les niveaux DOM et les liens associés particulièrement utiles.) J'encourage les corrections ou clarifications des autres.

Le DOM parle-t-il donc de la façon dont un document XML / HTML est représenté comme un modèle d'objet?

Oui. La spécification DOM niveau 1 comprend deux parties: le noyau et le HTML . La spécification Core DOM décrit un DOM général qui pourrait être utilisé pour représenter n'importe quel document structuré. La spécification HTML DOM décrit comment utiliser le Core DOM pour décrire spécifiquement des documents HTML et inclut des interfaces spécifiques à HTML.

Le DOM ne spécifie pas que les documents doivent être implémentés comme un arbre ou un bosquet, ni ne spécifie comment les relations entre les objets doivent être implémentées. De quelles autres manières le document peut-il être représenté?

DOM de base ne suppose que le document est un arbre. L' Nodeinterface est le "... type de données principal pour l'ensemble du [DOM]. Elle représente un seul nœud dans l' arborescence des documents ." Nodea plusieurs propriétés pour l' accès aux enfants, frères et soeurs, et les nœuds parents (par exemple parentNode, frstChild, etc.) qui implique une structure arborescente. Vous pouvez utiliser un arbre plat ou un arbre linéaire (par exemple, une liste chaînée), mais ce sera toujours une forme d'arbre.

Comme le souligne George Mauer dans les commentaires, vous voulez peut-être dire que le modèle sous - jacent d'une implémentation particulière n'a pas besoin d'être un arbre. Cela est vrai; tant que votre implémentation fournit les fonctionnalités promises dans la spécification DOM, vous pouvez utiliser la structure que vous souhaitez pour fournir ces fonctionnalités.

Les objets et les méthodes du moteur d'analyse DOM sont-ils dans leur propre langue maternelle?

En général, oui . Dans la plupart des navigateurs, le DOM est implémenté dans un langage de niveau inférieur comme C, et le navigateur fournit des liaisons à l'environnement JavaScript qui peuvent manipuler les représentations réelles. En fait, si vous regardez la question Signification de «Déplacer DOM en Javascript»? , vous verrez que Google est intéressé à passer à une implémentation native du DOM JavaScript (susceptible d'éviter d'avoir à la fois une fonction C ++ et un wrapper JavaScript en double pour cette fonction C ++; peut-être aussi pour des gains de performances).

qu'est-ce qui est responsable de la traduction de JavaScript vers la langue maternelle?

Je suis un peu plus flou à ce sujet, mais ma compréhension est que lorsqu'une liaison DOM JavaScript est invoquée, l'environnement d'exécution JavaScript (qui est lui-même implémenté dans un langage de niveau inférieur comme C) appelle la fonction DOM appropriée (écrit en C / C ++) pour manipuler le DOM.

Si vous voulez aller plus loin, vous devrez parler à quelqu'un qui fabrique des navigateurs.

cela signifie-t-il que lorsque vous créez des liaisons de langage en suivant l'IDL, vous créez simplement des objets dans le langage spécifique, c'est-à-dire C ++ avec lequel votre moteur d'analyse DOM est construit?

Oui. L'IDL du DOM est indépendant de la langue, de sorte que vous pouvez l'implémenter dans n'importe quelle langue. «Écrire une implémentation DOM» signifie écrire du code (dans un langage particulier) pour se conformer aux interfaces IDL décrites dans les spécifications DOM.


Je pense que les liaisons devraient impliquer deux choses. Appel du runtime natif via des références et un moyen de récupérer les événements de l'implémentation native. Vous pouvez réellement voir quelles méthodes ne sont que des wrappers de code natif dans les navigateurs en les consignant généralement sur console. par exemple console.log(document.write);ou console.log(document.constructor);- ajoutez .toString()le paramètre de journal dans les navigateurs qui ne vous donnent pas le texte de la fonction. Les objets n'auraient pas nécessairement un équivalent en miroir dans le code natif. De plus, la plupart des propriétés des objets DOM sont en fait des getters avec un comportement associé.
Erik Reppen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.