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 :

Optimisation boucles - mise en cache variable dans un for?


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut Optimisation boucles - mise en cache variable dans un for?
    Bonjour, étant en pleine phase d'optimisation de mes pages js, j'ai parcouru différents sites web dont un traitant des boucles for :

    apparement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var i = 0; i < monTab.length; i++){
    //traitement
    }
    serait à remplacer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var i=0, l = monTab.length; i < l; i++){
    // traitement
    }
    soit disant , la deuxieme version permet de mettre en cache la variable "profonde" et ainsi gagner quelques ms en temps d'execution, quelqu'un aurait des précisions là dessus, car je suis un peu perplexe :/
    L'intelligence c'est comme la confiture, moins tu en as , plus tu l'étales...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    Dans la première version, la longueur du tableau parcouru est évaluée à chaque boucle pour vérifier la condition "i < monTab.length".

    Dans la seconde version (je suppose qu'il y a une coquille et que la condition d'arrêt est "i < j" au lieu de "i < l"), la longueur du tableau n'est évaluée qu'au début de la boucle et stockée dans une variable. Il y a donc le gain d'évaluation de longueur du tableau à chaque boucle...

    Cette optimisation est vraiment efficace sur les "grandes" boucles, sur les petites itérations, le gain est minime... Mais il est intéressant d'en faire une "bonne pratique" pour les itérations, le code sera "pré-optimisé"...

    A+

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    une correction d'abord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var i=0, j = monTab.length; i < j; i++){
    Oui effectivement.
    Dans ton 1° exemple, le .length est évalué à chaque itération, alors que dans la 2° il n'est évalué qu'une seule fois pour alimenter la variable "j".
    Suivant le nombre d'itérations, c'est cette différence qui fait gagner plus ou moins de temps de traitement ...

    Tu trouveras quelques éléments d'optimisation dans cette discussion (au thème plus large) ...

    EDIT : grilled !

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    onpeut eviter même le calcul du length
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var i=-1
    while (montableau[++j]){
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Exact, par contre, ça pardonne pas les "trous" dans le tableau ...

    Ceci dit, avec le for() ci-dessus, il faudrait aussi ajouter un test pour les gérer

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut
    Merci bien pour ces réponses
    L'intelligence c'est comme la confiture, moins tu en as , plus tu l'étales...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Incrémenter une variable dans un for-each
    Par enzostar dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 01/08/2012, 17h19
  2. [OPTIMISATION] Date en tant que variable dans les clauses WHERE
    Par dens19 dans le forum Développement
    Réponses: 11
    Dernier message: 18/09/2009, 08h57
  3. [Smarty] Problème récupération variable dans un for
    Par slaxsystem dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 02/05/2007, 17h10
  4. [debutant]gérer plusieurs variables dans un for ?
    Par Merfolk dans le forum Débuter
    Réponses: 5
    Dernier message: 09/03/2006, 21h01
  5. Réponses: 37
    Dernier message: 02/03/2006, 01h58

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