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 :

Utilisation du "with"


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de the-destroyer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 204
    Par défaut Utilisation du "with"
    Bonjour,

    je reste perplexe sur l'utilisation du with, est-ce que cela vaut vraiment le coup de l'utilisé losrque l'on modifie pas mal de valeur d'un objet ? Mais surtout le temps d’exécution n'est-il pas plus de long ? (en micro )

    merci d'avance de vos commentaires !

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    J'aime bien la concision que ça génère (forcément )

    mais il faut être assez sûr de son coup pour en tirer parti;

    tiens, petit condensé de sagesse: https://developer.mozilla.org/fr/R%c...tructions/with

  3. #3
    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 : 54
    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
    Personnellement, je n'utilise jamais with. L'intérêt me semble limité, notamment pour les raisons évoquées dans le lien proposé par JT.
    Concernant les performances, j'ai toujours été persuadé qu'effectivement, with était moins optimisé, ce que me confirme un petit test rapide :
    Code html : 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
    28
    29
    30
    31
    32
    33
    <!doctype html> 
    <html lang="fr"> 
     
    <head> 
    	<meta charset="utf-8" /> 
    	<title>with</title>
    	<style>
            </style>
    </head> 
     
    <body>
     
    	<div id="div1">Div de test</div>
    	<button onclick="testWith()">Lancer le test</button>
    	<script type="text/javascript">
                    function testWith(){
                            var divTest, resultat, i;
                            var t = new Date().getTime();
                            for(i=0; i < 1000000; i++){
                                    with(document){
                                            divTest = getElementById('div1');
                                    }
                            }
                            resultat = (new Date().getTime() - t) + ' ms\n';
                            t = new Date().getTime();
                            for(i=0; i < 1000000; i++){
                                    divTest = document.getElementById('div1');
                            }
                            resultat += (new Date().getTime() - t) + ' ms';
                            alert(resultat);
                    }
            </script>
    </body>
    Le résultat sur Firefox est assez éloquent :
    Nom : with.png
Affichages : 82
Taille : 3,1 Ko
    et est confirmé sur tous les navigateurs (IE9, Opera, Chrome et Safari) avec des écarts plus ou moins importants, mais toujours significatifs, de mémoire, jamais moins de 3x plus lent pour with.
    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

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    moralité, ne pas employer with dans une boucle...

  5. #5
    Membre chevronné Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Par défaut
    Bonjour,

    Je n'ai jamais compris les arguments de concision et de lisibilité concernant 'with', puisque l'utilisation d'une variable intermédiaire me semble apporter le même résultat, sans en avoir les inconvénients.

    Je m'explique :
    La lecture n'est en rien simplifiée, comme le montre l'exemple donné dans le lien ci-dessus. Au contraire, on distingue même moins clairement la portée des éléments utilisés.

    La concision ne m'a jamais paru essentielle, surtout qu'elle vient le plus souvent à l'encontre de la lisibilité.

    Dans le cas où on cherche à écrire le moins de code possible, autant utiliser un éditeur qui fait l'auto-complétion des symboles existant déjà dans le fichier. Le code résultant sera toujours lisible, et on se sera moins fatigué !(quoique ctrl+espace ou fleche bas... pffff !!)

    Et si le poids du fichier résultant prends une importance pour un script utilisé en production, on a toujours la possibilité d'activer une compression gzip et/ou de compresser le javascript (certains diront obfusquer) avant de l'envoyer au client.

    Pour finir, même si le petit test de Bovino l'illustre tout à fait, il est assez évident que les performances seront moins bonnes puisque l'utilisation de with provoque systématiquement une phase de recherche supplémentaire. La complexité résultante est donc forcément plus élevée, puisqu'on augmente inutilement le nombre d'opération élémentaire.
    Je n'ai jamais compris (et c'est valable pour tout language) cette recherche de l'expression la plus concise possible (en terme de caractères écrits) surtout si est au détriment des performances ou de la lisibilité.

    Voilà pour mon avis !

  6. #6
    Membre confirmé Avatar de the-destroyer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 204
    Par défaut
    Wow que de reponse ^^ :3

    Merci pour vos avis, mais alors cette fonction du noyau javascript ne serait pas a refaire ?

  7. #7
    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 : 54
    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
    Citation Envoyé par the-destroyer
    mais alors cette fonction du noyau javascript ne serait pas a refaire ?
    Plus exactement, à supprimer selon moi, comme write(), eval() ou autres... D'ailleurs, elle fait partie des Bad Parts évoquées par Douglas Crockford dans JavaScript : gardez le meilleur.

    Le problème, c'est que tu ne peux pas maîtriser le navigateur utilisé par l'utilisateur et que ça force JavaScript à être retrocompatible, donc supprimer des fonctionnalités pourrait amener des sites anciens à ne plus fonctionner.
    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

  8. #8
    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 : 54
    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
    Citation Envoyé par nadox
    Voilà pour mon avis !
    Ah ben j'avoue que tu viens d'exprimer parfaitement mon opinion !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with(nadox){
        OK++;
    }
    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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/11/2006, 18h00

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