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 23/06/2011, 18h23   #1
Membre régulier
 
Avatar de the-destroyer
 
Homme
Lycéen
Inscription : mars 2009
Messages : 201
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 17
Localisation : France

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : mars 2009
Messages : 201
Points : 80
Points : 80
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 !
the-destroyer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 18h55   #2
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
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
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/06/2011, 19h23   #3
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
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 :
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 :
with.png
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 !
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 10
Vieux 23/06/2011, 19h50   #4
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
moralité, ne pas employer with dans une boucle...
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 20h03   #5
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : 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
Points : 545
Points : 545
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 !
nadox est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/06/2011, 20h26   #6
Membre régulier
 
Avatar de the-destroyer
 
Homme
Lycéen
Inscription : mars 2009
Messages : 201
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 17
Localisation : France

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : mars 2009
Messages : 201
Points : 80
Points : 80
Wow que de reponse ^^ :3

Merci pour vos avis, mais alors cette fonction du noyau javascript ne serait pas a refaire ?
the-destroyer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 20h27   #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
Citation:
Envoyé par nadox
Voilà pour mon avis !
Ah ben j'avoue que tu viens d'exprimer parfaitement mon opinion !
Code :
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 !
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 23/06/2011, 20h35   #8
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
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 !
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 23/06/2011, 20h39   #9
Membre régulier
 
Avatar de the-destroyer
 
Homme
Lycéen
Inscription : mars 2009
Messages : 201
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 17
Localisation : France

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : mars 2009
Messages : 201
Points : 80
Points : 80
okay,

donc l'utilisation est a exclure ? Quan est-ce qu'il mettrons a jour le noyau javascript d’après vous ?
the-destroyer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 13h09   #10
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
petit exemple des seuls cas où j'utilise with

Code :
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
<script type="text/javascript">
 
function suite(nbr,inc){
 
	with(this){
		add=nbr;
		pas=inc;
		tot="Nouvelle suite: ";
	}
}	
 
 
suite.prototype.plus=function(){
	with (this){
		if(tot.length<50){
			alert(tot);
			add+=pas;
			tot+=add+"-";
			setTimeout(function(){plus()},500)
		}
	}
}
 
 
new suite(45,3).plus();
 
</script>
pas vraiment plus court qu'autre chose! Mais ça me parle assez pour que je rentabilise cette instruction singulière;

ps: pour document.write, c'est effectivement une aberration; pour eval, mon avis est extrêmement réservé: sa puissance contrôlée est fabuleuse (et encore, je n'ai jamais été très loin dans ce sens);
__________________
On ne mord pas, on manifeste seulement notre tristesse face à des exposés de situations qui défient notre entendement binaire.
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 09h24   #11
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 019
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 019
Points : 45 114
Points : 45 114
J'abonde dans le sens de JT...
Je n'utilise jamais with en js, mais je comprends son utilisation dans le contexte objet pour la lisibilité du code (factorisation), mais les tests que j'ai pu effectuer sur le with ne m'ont pas convaincu quand à son utilité en gain de vitesse d'execution
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 10h25   #12
Membre régulier
 
Avatar de the-destroyer
 
Homme
Lycéen
Inscription : mars 2009
Messages : 201
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 17
Localisation : France

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : mars 2009
Messages : 201
Points : 80
Points : 80
Oui donc a choisir autant gagner en vitesse qu'en visibilité, enfin un code sans with est toujours lisible ou du moins il n'est pas incompréhensible donc autant gagné en vitesse lors de l’exécution de la page
the-destroyer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 12h26   #13
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Citation:
Envoyé par Bovino Voir le message
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.
Code :
1
2
3
with(document) {
   write("<script>eval('alert(\"coucou !\"');</script>");
}
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 22h53   #14
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Grlgxq !… J'ai besoin d'une greffe du cœur de toute urgence.

C'est marrant parce qu'avant de lire cette discussion j'avais des a priori négatifs sur with, mais sans raison concrète. Maitenant j'en ai ^^

Mais je comprends à moitié pourquoi il existe. Disons que JS est un langage tolérant – c'est à la fois sa force et sa faiblesse – et with est d'un confort assez extraordinaire quand on ne recherche pas la performance du code.
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 09h46   #15
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Encore plus marrant quand on les cumule

Code :
1
2
3
4
5
6
7
8
9
10
11
var o1 = {
   prop1: "abc"
};
var o2 = {
   prop2: "xyz"
};
with(o1) {
   with(o2) {
       alert(prop1+prop2);
   }
}// l'alert affiche "abcxyz"
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 10h05   #16
Responsable JavaScript & AJAX

 
Avatar de vermine
 
Inscription : mars 2008
Messages : 2 686
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2008
Messages : 2 686
Points : 5 755
Points : 5 755
Romain, si après ça tu n'as pas assez de matière pour terminer tes jeux, que devons-nous faire ?
__________________
Elen Poukram - Isegoria - Sandawe
vermine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 10h21   #17
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Citation:
Envoyé par vermine Voir le message
Romain, si après ça tu n'as pas assez de matière pour terminer tes jeux, que devons-nous faire ?
Disons que ce n'est pas la matière qui fait défaut
Mais promis je vais trouver le temps, c'est vrai que ça fait longtemps que ça me démange... ^^'
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 10h52   #18
Membre habitué
 
Homme
Étudiant
Inscription : mai 2011
Messages : 226
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 226
Points : 126
Points : 126
La concision du code peut devenir un paramètre important dans certains cas. Si le site en question reçoit énormément de requêtes par secondes, par exemple, il vaut mieux rendre le code le plus court possible, et with est une astuce comme une autre pour cela.

Les pertes de vitesse d'exécution engendrées sont insignifiantes au regard de la puissance des ordinateurs d'aujourd'hui. Moralité, je pense qu'il vaut mieux gagner en performance dans le traitement des requêtes serveur que dans la vitesse d'exécution du code. Sauf dans des cas très très particulier, je pense que la perte est plus grande dans le premier cas.
Sharcoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 12h18   #19
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
Citation:
Envoyé par Sharcoux Voir le message
Les pertes de vitesse d'exécution engendrées sont insignifiantes au regard de la puissance des ordinateurs d'aujourd'hui. Moralité, je pense qu'il vaut mieux gagner en performance dans le traitement des requêtes serveur que dans la vitesse d'exécution du code. Sauf dans des cas très très particulier, je pense que la perte est plus grande dans le premier cas.
Euh, oui... mais là du coup tu défends quelle thèse?
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 12h20   #20
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
petit défi pour ceux que ça passionne (et il y en a visiblement ): créer une instruction without;

Vous avez 4 heures
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h39.


 
 
 
 
Partenaires

Hébergement Web