Bonsoir.
Etant empêtré sur de la maintenance de Thunderbird, je tenais à vous
remercier avant de partir en weekend.
C'est extrêmement intéressant et l'explication qui frôle la limite de
mes connaissances me permet de mieux comprendre les imbrications.
Toujours aussi passionnant !
Bon weekend.
Cédric.
Mitch a écrit :
Cédric Schmitz a écrit :
Merci pour ces explications.
J'ai tenté ce genre d'explication, mais ça ne parle pas à grand monde
en fait.
Rappelle-leur un truc: en IT, ne pas suivre la tendance c'est se
retrouver au chômage. La veille technologique, ça les concerne aussi:
la période glaciaire de IE 6 est terminée.
Les concepteurs de sites que je côtoie utilisent des outils sans
savoir comment ça tourne (comme trop souvent).
Eh ben... Dis-leur de vite apprendre, parce que avec la folie des
standards qui se développe chez les éditeurs de navigateurs, même sous
IE 8 leurs styles et scripts vont bomber! Et qu'ils ne comptent pas
trop sur le mode de compatibilité, ça n'a jamais bien marché ce truc!
Ce qui fait que parler de DOM et de XML a un adepte de Dreamweaver
n'a aucun sens... pour lui.
Un utilisateur de Dreamweaver n'est pas un auteur de site web. C'est
un graffiteur d'Internet (je parle du type avec une bombe de peinture
qui écrit FUK sur les bords d'autoroute, pas la catégorie artiste
urbain avec un aérographe). J'imagine que dès qu'il faut faire un
contenu un peu plus interactif, ils sortent du Flash (sans penser à
ceux qui ne veulent/ne peuvent pas utiliser Flash, comme les
non-voyants, les utilisateurs de navigateurs mobiles, les gens en
entreprise avec un pare-feu très strict, ou les utilisateurs de
systèmes et navigateurs 64-bit)?
Dois-je en conclure qu'un navigateur se connecte systématiquement au
DOM (ou l'implémente de lui même) lorsqu'il lit l'entête du fichier ?
Il ne se 'connecte' pas: le DOM (Document Object Model, ou Modèle
d'Objets du Document) est un 'arbre virtuel' que le navigateur
construit pour modéliser le contenu du document. Cette arbre part de
la fenêtre active et descend sur le document, lequel se divise en head
et body (oui, comme les balises du même nom) lesquels se divisent en
branches qui peuvent porter plusieurs noeuds (balises). L'intérêt
d'utiliser le DOM, c'est que tu le construis avec du (X)HTML, mais
comme c'est un standard, tu peux le naviguer avec un autre langage,
comme le CSS et le JavaScript. L'en-tête de fichier (type MIME et
DOCTYPE conjugués) détermine le mode de compatibilité du DOM: grosso
modo, en mode quirks, tu as le DOM 0 de IE 4. En mode Strict (IE 6+,
Mozilla 1+, Opera 6+), tu as le DOM 1 (qui sert de base aux DOM 2 et
3, lesquels sont des super ensembles du DOM 1).
Comme sur un arbre réel, chaque noeud déclenche la sortie d'une
nouvelle branche, laquelle peut comporter plusieurs noeuds etc.
Quelle importance? Imagine le cas suivant, souvent généré par une
ancienne version de Dreamweaver ou par Frontpage:
<p>Une phrase <b>avec une partie grasse, <i>une partie grasse et en
italiques,</b> et une partie italique seulement</i> avant fin de la
phrase</p>
Si tu regardes de plus près, tu remarqueras que cette partie comporte
une erreur: la balise B est ouverte avant la balise I, et est ensuite
fermée dans la balise I. Problème:
- puisque B est ouverte avant I: B contient I;
- puisque B et I sont définies en HTML pour être fermées
explicitement, la fermeture de I après la fermeture de B signifie: I
contient B;
- une branche ne peut se regreffer sur elle-même, sinon elle devient
son propre parent (ce qui rend les deux conditions ci-dessus
mutuellement exclusives).
Si tu scriptes (et si je me rappelle bien, comme je code en XHTML
exclusivement ce type d'erreur ne m'arrive plus):
- sous IE, naviguer entre B et I en utilisant parentNode (ou
object.parent) te fait entrer dans une boucle sans fin, qui peut
planter le navigateur et même la machine;
- sous Firefox, la non-fermeture de I entraîne que B est gardé ouvert
jusqu'à la fermeture de la branche principale (ici, P);
- sous Opera, la fermeture de B entraîne la fermeture de I, et la
création d'une balise anonyme I après B.
Résultat: un plantage (IE), un style non appliqué (Firefox) ou un
noeud supplémentaire (Opera). Va créer un script qui parcoure le DOM
tout seul après ça!
D'un autre côté, en faisant du XHTML, un navigateur moderne (Opera ou
Firefox, en utilisant le type MIME du XHTML, soit
application/xhtml+xml) balancera une erreur 'sèche' sur l'erreur, ce
qui entraîne la correction obligatoire de l'erreur, qui crée un DOM
correct, qui rend la rédaction d'un script fonctionnant de la même
manière sur tous les navigateurs beaucoup plus simple (grosso modo, tu
crées sous Firefox, ça marche sous Opera et Safari, et avec un minimum
de corrections stylistiques et syntaxiques sous IE 6 et 7).
L'autre intérêt c'est la possibilité d'utiliser la flexibilité du XML,
et donc d'ajouter, directement dans le document racine, d'autres
éléments XML non HTML comme le MathML (sympa pour écrire une formule
mathématique proprement) ou le SVG (graphiquement surpuissant).
L'avantage de procéder comme ceci plutôt que d'intégrer des objets,
images etc. c'est que comme c'est du XML, les noeuds de ces 'espaces
de nom' (namespaces) peuvent être intégrés au DOM directement, et
navigués comme le reste du document.
Traduction: en XHTML, tu peux tracer 25 ellipses en SVG, et rendre
chacune indépendamment cliquable (ou faire suivre la souris, ou faire
pivoter sur elle-même etc.), sans Flash, dans un seul fichier texte
(donc une seule requête HTTP) qui peut lui-même être intégré dans un
autre document XML et repris dans une application.
A côté, faire mumuse avec les API de Flash, c'est moins flexible, plus
lourd et moins portable.
Bon, certains vont te répondre que DHTML de Microsoft avec les objets
MSO et VML permettent déjà de faire ça, et que les gens n'utilisent
que IE. Tu peux leur répondre que:
- ça ne marche pas sous Firefox ni sous Mac, et donc 30% des
internautes français sont virés de leur site (ça fait quand même
beaucoup),
- ça demande une révision avec chaque ancienne version d'IE (IE5, 6 et
7 doivent être testés séparément et sont des versions supportées par
Microsoft donc utilisées),
- ça ne fonctionnera plus avec IE 8.
Note: sous IE, ça ne marche pas encore très bien, parce que IE (même
8) est incapable de lire du XHTML comme étant du XML (oui, ils sont
pathétiquement à la traîne chez MS). Par contre, même sous IE,
utiliser une syntaxe 'comme XHTML' propre diminue radicalement le
temps d'affichage (bénéfice immédiat) et le nombre d'erreurs de
construction du DOM (bénéfice visible en note 2).
Note 2: tu peux, à l'aide de scripts, 'couper' des branches ou en
'faire pousser' de nouvelles, ou simplement modifier les valeurs de
branches qui sont déjà là. Si ton arbre est bien défini (note 1), tu
peux réécrire intégralement la page avec du script (selon les actions
utilisateur, par exemple). Si, en plus, tu utilises JavaScript pour
lire des données externes à la page et agir selon ces données pour
modifier la page déjà chargées, tu te retrouves avec une page dont le
contenu change selon les interventions client et serveur avec le temps
sans nécessité de la recharger; tu peux donc, littéralement,
programmer une application temps réel dans le navigateur, et d'autant
plus facilement que la page suit un DOM de type XML et que les données
chargées sont de type XML aussi. Et là, on attaque le gros morceau: on
modifie de manière décalée (entre 2 chargements de page depuis le
serveur) la structure XML d'une page à l'aide de JavaScript: c'est
donc du JavaScript et du XML asynchrones, en anglais Asynchronous
Javascript And XML - communément raccourci en AJAX (ce qui me mène à
la note 3).
Note 3: si ils te disent que puisque les applis Google fonctionnent
sous IE, c'est que IE est super pour AJAX, tu peux leur dire de
regarder de plus près:
- le code AJAX pour IE doit être développé séparément de celui pour
tous les autres navigateurs, car IE est pathétique côté support du DOM
et de ses méthodes; l'utilisation de hacks spécifiques pour
circonvenir les erreurs de conception, les erreurs d'exécution et
l'incapacité de IE de supporter des modifications 'live' du document
rendent sa manipulation plus délicate que les autres navigateurs;
- pour suivre le point précédent, le code développé pour IE est plus
long et plus lourd que pour les autres navigateurs, car il faut
également réfréner les fuites mémoire inhérentes au gestionnaire de
mémoire d'IE, lequel est incapable de gérer la mémoire sans une canne,
un bavoir et 3 infirmières pour lui tenir la main;
- si ils te sortent que IE a 'inventé' AJAX avec XmlHttpRequest,
rappelle-leur que c'est Firefox qui a intégré cet objet directement
dans le navigateur le premier, sans aucune difficulté, et que sa
version est plus flexible que la version IE d'origine, ce qui a
entraîné l'explosion d'AJAX;
- pour bien enfoncer le clou, dis-leur de sortir un chronomètre et de
déterminer la différence en temps de chargement d'une appli AJAX sous
Firefox et/ou Opera, comparé avec IE - et rappelle-leur que passé 8
secondes, un internaute a tendance à aller voir ailleurs (chez moi,
Gmail charge en 3 secondes sous Firefox, en 12 secondes sous IE 6
quand il ne plante pas en route);
- enfin, rappelle-leur qu'avec Gmail, Google Apps, Yahoo! Mail,
Hotmail et tous ces sites comme YouTube, eBay, Amazon etc. qui
utilisent tous AJAX (et non plus du Flash clignotant à tous les
étages, ou seulement pour les pubs), leurs commanditaires vont finir
par leur demander des choses qu'ils ne pourront plus faire car ils s'y
seront pris trop tard pour les comprendre (et ce, surtout au niveau de
la rapidité de l'application développée: AJAX étant basé sur un
langage de script, la moindre erreur d'optimisation peut entraîner des
pertes de performance abominables - et donc, inacceptables).
Mais c'est un sujet passionnant !!!
Je veux oui!
Cédric.
Mitch
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]