Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 21h36   #1
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 20
Points : 16
Points : 16
Par défaut [Performance] Afficher/Masquer une colonne

Bonjour à tous,

Vous allez surement vous dire que c'est du vu et du re-vu mais mon problème ce n'est pas d'afficher ou de masquer les colonnes, j'utilise un simple :
Code :
getElementById('id').style.display = "none"
dans une boucle for.

Le problème c'est que je dois masquer une colonne pour un tableau d'environ 2000 lignes (minimum) et le fait d'utiliser cette boucle me prend à peut près 30 secondes pour tout afficher.

Je me demandais si il n'y aurait pas une autre solution plus rapide?
J'ai fait le tour de beaucoup de solutions mais aucune ne ralenti vraiment le temps d'affichage.

Merci d'avance
Rctiste est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 21h57   #2
Rédacteur/Modérateur
 
Avatar de bigboomshakala
 
Homme
Ingénieur développement logiciels
Inscription : avril 2004
Messages : 2 051
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2004
Messages : 2 051
Points : 2 425
Points : 2 425
salut

1ère optimisation : ne pas faire getElementById à chaque fois...

par exemple à la fin du chargement de ta page :
Code :
1
2
3
4
5
6
7
8
var elts = [];
for (ma boucle){
  elts.push(document.getElementById('mon_id' + i));
}
 
/* 
tu remplis le tableau comme tu veux. si tu utilises jQuery c'est encore plus simple, elts = $('.toto') avec toto un css que tu mets sur les éléments à masquer/afficher, ou tu peux choisir un autre sélecteur
*/
par la suite tu boucles sur le tableaux des éléments, ce qui peut être 'achement plus rapide si le DOM de ta page est gros.
__________________
Modérateur/Rédacteur

Tutoriels/Articles :
- Espace de noms (ou namespace) en JavaScript
- Créer une table HTML éditable en JavaScript (nouveau)
- Smile.Fx : Bibliothèque d'effets visuels en JavaScript (en cours - démo disponible)

mon espace
bigboomshakala est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 22h04   #3
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 20
Points : 16
Points : 16
Merci beaucoup de cette réponse rapide,

Je ne vois pas trop comment utiliser ta var elts
Rctiste est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 22h07   #4
Rédacteur/Modérateur
 
Avatar de bigboomshakala
 
Homme
Ingénieur développement logiciels
Inscription : avril 2004
Messages : 2 051
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2004
Messages : 2 051
Points : 2 425
Points : 2 425
Code :
1
2
3
4
5
6
7
8
function toggle(show){
  var i, n;
  for (i=0, n=elts.length; i<n; i++){
    elts[i].style.display = show ? null : "none"; 
   // ou "block" ou "inline" à la place de null
   // suivant ce que tu veux
  }
}
__________________
Modérateur/Rédacteur

Tutoriels/Articles :
- Espace de noms (ou namespace) en JavaScript
- Créer une table HTML éditable en JavaScript (nouveau)
- Smile.Fx : Bibliothèque d'effets visuels en JavaScript (en cours - démo disponible)

mon espace
bigboomshakala est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 22h13   #5
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 20
Points : 16
Points : 16
Oki, je comprend beaucoup mieux, je test ça dès que je peut et je vous tient au courant.

Merci beaucoup !
Rctiste est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h22   #6
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 20
Points : 16
Points : 16
Voici un script vraiment performant (environ 1s a la place des 30 du départ) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
var etat=1;
    var i;
    var affBlock= "block";
    var affNone= "none";
 
    function affichageCheckbox() {
 
        var lstIdCheckbox= document.getElementsByName("id_checkbox");
        var nombreLigne= checkbox.length;
 
        if (etat == 1) {
            for (i=0; i<(nombreLigne); i++) {
                lstIdCheckbox[i].style.display = affBlock;
            }
            etat=0;
        } else {
            for (i=0; i<(nombreLigne); i++) {
                lstIdCheckbox[i].style.display = affNone;
            }
            etat=1;
        }
    }
Voila j'espere que sa aidera du monde !!!
Rctiste est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h47   #7
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
attention, une cellule de tableau n'est pas de type bloc mais table-cell !
Si le style CSS (donc défini dans un fichier CSS ou entre balises <style>) n'est pas à none, il est préférable de passer par une chaine vide :
sinon, ça devient un peu plus compliqué puisque table-cell n'est pas une valeur reconnue par tous les navigateurs. Dans ce cas, je te conseillerais plus d'alterner entre deux noms de classe en remplaçant
Code :
lstIdCheckbox[i].style.display = affBlock;
par
Code :
lstIdCheckbox[i].className = 'affBlock';
et dans ta feuille de style, tu affecterais ou non le display none.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 19h39   #8
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 20
Points : 16
Points : 16
Oki je ne savais pas, merci de la remarque
Rctiste est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h46.


 
 
 
 
Partenaires

Hébergement Web