IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[IE6] Optimiser cr�ation des �l�ments


Sujet :

JavaScript

  1. #1
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut [IE6] Optimiser cr�ation des �l�ments
    Bonjour,

    j'ai un petit souci avec le moteur Javascript de IE6...

    En effet, je souhaite cr�er une dizaine de milliers de cellules de tableau (td), j'ai donc test� plusieurs m�thodes et j'aimerai savoir s'il y en a une plus optimale encore.

    Pourquoi? Parce que IE6 est super lent. L� ou Chrome / FF mettent 1 � 3 secondes, IE en met une bonne vingtaine.

    Je suis pass� par Prototype au d�part mais j'ai vite abandonn�, plus d'une minute sur IE

    Voici donc la solution que j'ai adopt� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    var table = document.createElement('table');
    var tbody = document.createElement('tbody');
     
    table.appendChild(tbody);
     
    var trTemplate = document.createElement('tr');
    var tdTemplate = document.createElement('td');
     
    for(var i = 0; i < 100; i++) {
    	var tr = trTemplate.cloneNode(false);
    	tr.id = i;
     
    	for(var j = 0; j < 500; j++) {
    		var td = tdTemplate.cloneNode(false);
    		td.id = i + '_' + j;
    		td.innerText = i + '_' + j;
     
    		tr.appendChild(td);
    	}
    	tbody.appendChild(tr);
    }
    document.body.appendChild(table);
    Ceci n'est qu'un exemple simplifi� bien s�r mais refl�te bien ma probl�matique.

    J'ai fais le test en faisant un createElement par boucle, mais c'est se tirer une balle dans le pied. C'est donc comme �a que je suis venu a utiliser cloneNode.

    Petites pr�cisions :
    • me dite pas de changer de navigateur, vous perdez votre temps, c'est impossible
    • A faire en JS car le faire en PHP mettrait le serveur � genou �tant donn� qu'� terme, il y aura une bonne dizaine de connexions simultan�es au serveur




    P.S : Test Chrome : 700ms ; Test IE8 : 8 secondes
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  2. #2
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    Salut !

    De m�moire, il me semble que inserRow et insertCell sont plus optimis�s que createElement pour les tables.
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    jour

    je vient d'essayer de cette facon

    amd x2 4200+

    sur ff j'obtient environ 6 secondes sur ie 8 dix secondes

    pas essayer sur ie 6 j'ai ie texter et sa a bugue

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script language="JavaScript" type="text/javascript">
     
    function ttb(){
    var tbs=document.getElementById("tabsee")
    for(var i=0;i<100;i++){
    tbs.insertRow(0)
    tbs.rows[0].id=i
     
    for(var j = 0; j < 500; j++) {
    tbs.rows[0].insertCell(j)
    tbs.rows[0].cells[j].id= i + '_' + j;
    tbs.rows[0].cells[j].appendChild(document.createTextNode(i + '_' + j));
    }
    }
    }
    </script>
    </head>
    <body onload='ttb()'>
    <table id='tabsee'>
    </table>
    </div>
    </div>
    </body>
    </html>

  4. #4
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    Salut !

    De m�moire, il me semble que inserRow et insertCell sont plus optimis�s que createElement pour les tables.
    Salut !

    J'ai essay� aussi, mais d�trompe toi, c'est largement pire avec insert[Row|Cell]. La preuve, j'ai jamais eu la patience d'attendre la fin de l'ex�cution du script (), soit > 2 minutes...

    Pour info : j'ai utilis� le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    var table = document.createElement('table');
    var tbody = document.createElement('tbody');
     
    table.appendChild(tbody);
     
    var trTemplate = document.createElement('tr');
    var tdTemplate = document.createElement('td');
    //tdTemplate.innerText = '1';
    var deb = new Date();
     
    for(var i = 0; i < 100; i++) {
            var tr = tbody.insertRow(i);
    	tr.id = i;
     
    	for(var j = 0; j < 500; j++) {
                    var td = tr.insertCell(j);
    		td.id = i + '_' + j;
    		td.innerText = i + '_' + j;
    	}
    }
    document.body.appendChild(table);
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  5. #5
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par mekal Voir le message
    jour

    je vient d'essayer de cette facon

    amd x2 4200+

    sur ff j'obtient environ 6 secondes sur ie 8 dix secondes

    pas essayer sur ie 6 j'ai ie texter et sa a bugue

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script language="JavaScript" type="text/javascript">
     
    function ttb(){
    var tbs=document.getElementById("tabsee")
    for(var i=0;i<100;i++){
    tbs.insertRow(0)
    tbs.rows[0].id=i
     
    for(var j = 0; j < 500; j++) {
    tbs.rows[0].insertCell(j)
    tbs.rows[0].cells[j].id= i + '_' + j;
    tbs.rows[0].cells[j].appendChild(document.createTextNode(i + '_' + j));
    }
    }
    }
    </script>
    </head>
    <body onload='ttb()'>
    <table id='tabsee'>
    </table>
    </div>
    </div>
    </body>
    </html>
    Ce code ne r�pond pas � mes attentes, il construit les lignes de mani�res inverses, (99 � 0), hors je souhaite l'inverse

    J'ai donc fait un insertRow(i), et je retombe bien sur le post pr�c�dent, � savoir au del� de mes limites
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  6. #6
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    Arf... d�sol�
    En dernier recours, peut-�tre que la cr�ation d'une chaine contenant ton tableau puis l'insertion par innerHTML ira plus vite.
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  7. #7
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    Arf... d�sol�
    En dernier recours, peut-�tre que la cr�ation d'une chaine contenant ton tableau puis l'insertion par innerHTML ira plus vite.
    D�j� tent� aussi

    Trop long

    IE de m*rde !
    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

  8. #8
    R�dacteur/Mod�rateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par d�faut
    Bonjour,
    innerText n'est pas cross-browser.
    SpaceFrog a remarqu� sur la contribution " Construire un grand tableau plus rapidement" que
    Citation Envoy� par SpaceFrog Voir le message
    cloneNode est plsu rapide que le createElement
    .

  9. #9
    R�dacteur
    Avatar de Arnaud F.
    Homme Profil pro
    D�veloppeur COBOL
    Inscrit en
    Ao�t 2005
    Messages
    5 183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 5 183
    Par d�faut
    Je v�n�re cette grenouille venue d'ailleurs !



    Je pense donc que je ne peux pas faire mieux...

    C'est par l'adresse que vaut le b�cheron, bien plus que par la force. Hom�re

    Installation de Code::Blocks sous Debian � partir de Nightly Builds

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 09/06/2010, 10h08
  2. [DOM] Cr�ation d'�l�ments DOM - Pb IE6
    Par brazilia28 dans le forum G�n�ral JavaScript
    R�ponses: 16
    Dernier message: 22/07/2008, 15h13
  3. R�ponses: 4
    Dernier message: 03/12/2007, 16h28
  4. [AJAX] Cr�ation d'�l�ments de formulaire � partir des choix
    Par Drummkit dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 11/02/2007, 12h26
  5. R�ponses: 7
    Dernier message: 24/10/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo