Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1272 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] innerHTML ou DOM ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JS] innerHTML ou DOM ?

n°1714792
franceso
Posté le 09-04-2008 à 09:36:26  profilanswer
 

[:zytra] Salut les progueux !
 
Je suis en train de bosser sur un petit projet perso dans lequel je voudrais générer automatiquement en JS du contenu HTML de ma page. C'est pas du AJAX ni rien de compliqué, c'est juste une génération automatique de listes et de liens à partir de données qui sont stockées dans un JSON externe.
 
Au début, j'avais commencé à coder tout ça avec du innerHTML, genre :

Code :
  1. var html = "<ul>";
  2. for (var i in data) {
  3.   html = html + "<li>" + data[i] + "</li>";
  4. }
  5. html = html + "</ul>";
  6. document.getElementById("mon_id" ).innerHTML = html;


 
Puis j'ai découvert que innerHTML n'était pas standard et qu'il valait mieux utiliser le DOM, alors j'ai tout réécrit comme ça:

Code :
  1. var ul = document.createElement('ul');
  2. for (var i in data) {
  3.   var li = document.createElement('li');
  4.   li.appendChild( document.createTextNode(data[i]));
  5.   ul.appendChild(li);
  6. }
  7. document.getElementById("mon_id" ).appendChild(ul);


 
Et puis j'ai continué de me renseigner et j'ai trouvé sur le net tout et son contraire : certains disent que innerHTML est plus efficace et mieux supporté en pratique, d'autres disent que la seule manière valide est d'utiliser le DOM qui est un standard. :??:
 
 
Finalement que me conseillez-vous ? Y a-t-il selon vous une meilleure manière de procéder ?
 
 
:jap: merci d'avance


---------------
TriScale innov
mood
Publicité
Posté le 09-04-2008 à 09:36:26  profilanswer
 

n°1714971
gatsu35
Blablaté par Harko
Posté le 09-04-2008 à 13:42:02  profilanswer
 

pour bosser depuis plus de 2 ans sur des gros projets (site ou applications ajax) je peux t'affirmer, qu'il n'y a rien de plus rapide que le innerHTML quand on doit généré quantité astronomique de contenu (genre une liste de 800 contacts).
 
Ensuite si tu dois juste générer 2/3 bricole, tu peux très bien utiliser le dom, ce qui te permettra de rajouter des methodes/Events sur les objets plus facilement.

n°1714988
Skateinmar​s
Posté le 09-04-2008 à 14:01:37  profilanswer
 

La plupart des frameworks utilisent DOM pour ce genre de fonctions mais innerHTML est bien plus rapide :jap: à voir selon les besoins donc


---------------
Feedback HAV
n°1715033
franceso
Posté le 09-04-2008 à 14:47:15  profilanswer
 

OK.
 
:jap: Merci à vous deux. Je vais donc (au moins dans un premier temps) rester sur innerHTML.
 
Je jette aussi un coup d'oeil aux frameworks pour voir s'il y en a d'intéressants...


---------------
TriScale innov
n°1715053
tpierron
Posté le 09-04-2008 à 15:01:37  profilanswer
 

innerHTML est effectivement vachement plus rapide que DOM. Faut quand même faire gaffe avec l'injection de script (XSS), alors qu'avec DOM pas de problème pour transmettre n'importe quelle chaine à un createTextElement.
 
J'ai aussi ouïe dire qu'innerHTML sera enfin inclus dans les specs d'HTMLv5, donc à priori ça risque pas de passer en "deprecated" de sitôt.

n°1715103
masklinn
í dag viðrar vel til loftárása
Posté le 09-04-2008 à 16:01:46  profilanswer
 

Et accessoirement dans ton exemple d'innerHTML le HTML est créé n'importe comment, ça va ramer :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1715130
franceso
Posté le 09-04-2008 à 16:27:03  profilanswer
 

masklinn a écrit :

Et accessoirement dans ton exemple d'innerHTML le HTML est créé n'importe comment, ça va ramer :o

:sweat: ça m'étonne qu'à moitié : je suis loin d'être un expert JS.
 
Comment devrais-je faire ?


---------------
TriScale innov
n°1715134
masklinn
í dag viðrar vel til loftárása
Posté le 09-04-2008 à 16:32:21  profilanswer
 

franceso a écrit :

:sweat: ça m'étonne qu'à moitié : je suis loin d'être un expert JS.
 
Comment devrais-je faire ?


Une liste concaténée avec join:
 

Code :
  1. var html = ["<ul>"];
  2. for(var item in data) {
  3.    html.push("<li>" );
  4.    html.push(data[item]);
  5.    html.push("</li>" );
  6. }
  7. html.push("</ul>" );
  8.  
  9. document.getElementById("mon_id" ).innerHTML = html.join("" );


Ca permettra de créer beaucoup moins de chaînes de caractères, donc de bouffer moins de mémoire et d'aller plus vite.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1715136
gatsu35
Blablaté par Harko
Posté le 09-04-2008 à 16:33:52  profilanswer
 

le monsieur m'a grilled :o

Message cité 1 fois
Message édité par gatsu35 le 09-04-2008 à 16:37:54
n°1715142
masklinn
í dag viðrar vel til loftárása
Posté le 09-04-2008 à 16:35:30  profilanswer
 

gatsu35 a écrit :

dans la boucle à chaque fois que tu fais

Code :
  1. html = html + "blabla"


tu récréé un instance String, ce qui est assez consommateur en perf. Le mieux est de push ta string dans un tableau, et au final tu join l'ensemble

 
Code :
  1. var html = ["<ul>"];
  2. for (var i in data) {
  3.   html.push("<li>" + data[i] + "</li>" );
  4. }
  5. html.push("</ul>" );
  6. document.getElementById("mon_id" ).innerHTML = html.join("" );



fail


Message édité par masklinn le 09-04-2008 à 16:35:38

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 09-04-2008 à 16:35:30  profilanswer
 

n°1715147
franceso
Posté le 09-04-2008 à 16:39:44  profilanswer
 

:jap: Je connaissais pas cette technique...
 
Je vais regarder ça.


---------------
TriScale innov

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] innerHTML ou DOM ?

 

Sujets relatifs
XML DOM avec PHPModification innerHTML d'un select
[JS] document.getelementById(obj).innerHTML ne foncitonne pas sous IEDOM PHP equivalent de innerHTML
DOM ->String[PHP][DOM] balises select non envoyé au serveur
jQuery lent ?balise IMG dimensions fausses, difference entre HTML & DOM, sous IE
Attacher une fonction avec THIS sur un evenement en DOM 
Plus de sujets relatifs à : [JS] innerHTML ou DOM ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR