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 :

Bonnes pratiques JavaScript [D�bat]


Sujet :

JavaScript

  1. #21
    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
    @RV :
    2) Heu... que veux-tu �viter en contraignant volontairement l'utilisation de param�tres � ce niveau ?

    3) Nous sommes bien d'accord
    Cependant je ne vois pas le lien (je veux dire : je ne le vois pas encore ) entre eval et ceux que tu d�signes comme ses d�riv�s, je pense notamment � setTimeOut ou setInterval...
    Non, je ne cherche pas � contraindre l'utilisation de param�tres, mais les rendre possibles
    Pour info, le premier argument de setTimeout et setInterval est :
    • soit une cha�ne... si c'est le cas, la m�thode eval() sera appel�e pour interpr�ter le contenu ;
    • soit un nom de fonction, mais aucun argument possible ;
    • soit une fonction anonyme dans laquelle tu peux appeler une fonction avec des param�tres du contexte, c'est cette m�thode que je pr�conise !

    A noter aussi qu'avec Firefox, il est possible d'ajouter des arguments � ces fonctions qui seront transmis en param�tres � la fonction appel�e :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    setTimeout(une_fonction, 1000, param1, param2);
    est �quivalent � :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    setTimeout(function(){une_fonction(param1, param2)}, 1000);
    malheureusement, n'�tant pas cross-browser, l'int�r�t reste relatif
    Pour en revenir � :
    Citation Envoy� par franculo_caoulene
    1) Je mets le code Javascript en fin de document, pour une question de performance et d'am�lioration progressive.
    Cette m�thode permet de modifier le contenu avant le d�clenchement du onload et peut � certains �gards �tre consid�r�e comme plus performante que le classique onload sur le body
    Citation Envoy� par franculo_caoulene
    2) Je privil�gie les notations litt�rales. C'est plus court et plus lisible � force.
    +1
    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

  2. #22
    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 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    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 659
    Billets dans le blog
    1
    Par d�faut
    on ne peut malheureusement pas se passer compl�tement de l'eval sauf � passer par window[ ] masi cela revient au m�me
    Je pense en particulier � un retour d'objet json (ou hash) par ajax, l'eval est obligatoire...
    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 !

  3. #23
    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
    Citation Envoy� par SpaceFrog Voir le message
    on ne peut malheureusement pas se passer compl�tement de l'eval sauf � passer par window[ ] masi cela revient au m�me
    Je pense en particulier � un retour d'objet json (ou hash) par ajax, l'eval est obligatoire...
    il est possible de passer par un parseur JSON (ici par exemple). D'autre part, khayyam90 nous a propos� r�cemment une source qui devrait bient�t arriver sur les pages FAQ et Sources

    Ceci dit, il faut cependant garder � l'esprit que ces bonnes pratiques sont plus un "id�al" � atteindre que des obligations grav�es dans le marbre !
    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. #24
    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 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    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 659
    Billets dans le blog
    1
    Par d�faut
    oui � coup de split ou de regExp ou en parsant

    mais bon c'est assez gourmand ...
    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. #25
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    Pour info, le premier argument de setTimeout et setInterval est :
    * soit une cha�ne... si c'est le cas, la m�thode eval() sera appel�e pour interpr�ter le contenu ;
    * soit un nom de fonction, mais aucun argument possible ;
    * soit une fonction anonyme dans laquelle tu peux appeler une fonction avec des param�tres du contexte, c'est cette m�thode que je pr�conise !
    Ok ^^ j'ignorais la possible utilisation de code "brut" en premier param�tre, je n'ai toujours employ� que les deux autres m�thodes, au d�but des noms de fonctions, et depuis quelques temps des fonctions anonymes...

  6. #26
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par d�faut
    Au fait, quelle est votre fa�on de d�clarer des variables? Nous avons d�j� deux fa�ons de faire diff�rentes. Laquelle pr�f�rez-vous? Laquelle utilisez-vous?

  7. #27
    Expert confirm�
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par d�faut
    - Ne pas utiliser des expressions r�guli�res pour comparer / tester des dates. Utiliser... l'objet date exemple :
    http://www.developpez.net/forums/d57...t/#post3415858 (oui je me fais de la pub )


    Citation Envoy� par Bovino
    * Pour les fonctions r�currentes et/ou non cross-browser, se faire une biblioth�que de fonctions utilitaires. L'exemple le plus courant �tant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    function $(un_id){
        return document.getElementById(un_id);
    }
    Cette biblioth�que de fonction pourra par ailleurs �tre d�finie dans l'objet des variables globales !
    Juste une pr�cision : pas la peine de t�l�charger les 100-200ko d'une biblioth�que JS pour le plaisir d'utiliser uniquement la fonction $() (si, si j'ai vu �a )
    Donc utilisez une biblioth�que de fonctions... pour utiliser les fonctions de la biblioth�que, ou cr�ez votre biblioth�que.

  8. #28
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Tiens au fait : je me demandais autre chose :

    >>> est-ce que vous vous autorisez de longs chainages de fonctions ? ou est-ce que vous pr�f�rez "atomiser" un peu les instructions, pour une meilleure lisibilit� ?
    un exemple (assez simple) de ce que je veux dire (mais qui pourrait bien s�r �tre bien plus long ou tordu) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    // version chainée, compacte mais pas très lisible sans un rapide examen pour quelqu'un reprenant le code...
    var truc = tableauMachin[new Date().getFullYear()].substr((condition)? 0 : n);
    // où tableauMachin ne contient que des string, condition est un booléen, et n un number
    // au final, truc contiendra une sous-chaine de l'une des chaines contenues dans le tableau
    ___________________________________

    M�me chose pour l'op�rateur ternaire : "(cond)?a:b;"

    >>> quand on en chaine ou imbrique plusieurs, �a fait un peu mal les yeux
    Mais j'avoue que je le fais quand m�me de temps en temps... et vous autres ? ^^

  9. #29
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    tout d�pend de l'utilit� et des commentaires qui sont fait sur la source

    de m�me qu'un var b = (a) ? c:b;
    est parfois plus pratique si l'on n'est pas dans une optique de performance

  10. #30
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par d�faut
    �a d�pend de la lisibilit� dans les deux cas. Si c'est trop long, ou si le code contient d�j� pas mal d'indentations � ce niveau l�, j'ai tendance � �crire sur plusieurs lignes.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
            if (bien.Description) {
                s = (bien.Description.length > 150)
                    ? bien.Description.substring(0, 149)
                    : bien.Description;
            }
    En suivant ton exemple, plut�t tordu, j'�crirais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    var truc = tableauMachin[
      new Date()
      .getFullYear()
    ].substr((condition)? 0 : n);
    je suis le m�me principe pour les crochets que pour les accolades. L'op�rateur ternaire est court et intimement li� au substring(), le mettre � la ligne rendrait ce bout de code moins lisible.

  11. #31
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par d�faut
    Citation Envoy� par le_chomeur Voir le message
    tout d�pend de l'utilit� et des commentaires qui sont fait sur la source
    Je ne fais pas de commentaire � ce niveau l�, personnellement. J'essaie d'utiliser des noms assez lisibles et de factoriser au maximum de fa�on � ce qu'on comprenne sans commentaire.

    Citation Envoy� par le_chomeur Voir le message
    de m�me qu'un var b = (a) ? c:b;
    est parfois plus pratique si l'on n'est pas dans une optique de performance
    Des performances? C'est moins performant qu'un if?

  12. #32
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par d�faut
    Citation Envoy� par Bovino Voir le message
    il est possible de passer par un parseur JSON (ici par exemple). D'autre part, khayyam90 nous a propos� r�cemment une source qui devrait bient�t arriver sur les pages FAQ et Sources
    C'est quoi l'int�r�t de ce parseur ?

    Le seul cas ou le eval se jusifie, c'est sur un retour json d'une requete Ajax. Tant que l'ajax reste non cross-browser, ca signifie que tu maitrises ce qui se passe cot� serveur, donc que tu n'as pas besoin de te m�fier de ce que tu renvoies toi m�me.

  13. #33
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    oui un test conditionnel est plus lent qu'un if , car il doit �valuer l'instruction pour pouvoir tester la condition.

  14. #34
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par d�faut
    Je veux bien te croire mais j'aimerais une source, je n'en trouve pas.

  15. #35
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    un exemple simplifi� :


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    		<title>Untitled Document</title>
    	</head>
    	<body>
    		<input type="button" onclick="contional()" value="test conditionnel" />
    		<input type="button" onclick="normal()" value="test normal" />
    		<script type="text/javascript">
    			function contional(){
    				var Debut = new Date();
     
    				var a = true;
     
    				for(var i = 0 ; i<500000 ; i++){
    					var lol = (a) ? "ok":"ko";
    				}
    				var Fin = new Date();
    				alert((Fin-Debut)+ " ms"); 
    			}
     
    			function normal(){
    				var Debut = new Date();
     
    				var a = true;
    				for(var i = 0 ; i<500000 ; i++){
    					if(a){
    						var lol = "ok";
    					}
    					else{
    						var lol = "ko";
    					}
    				}
    				var Fin = new Date();
    				alert((Fin-Debut)+ " ms"); 
    			}
     
    		</script>
    	</body>
    </html>
    sur mon poste , j'ai 10 ms de diff�rences, avec un test ULTRA simple , donc je te laisse imaginer le r�sultat avec des boucles plus complexe ...

  16. #36
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par d�faut
    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
    28
    function time(fn, n)
    {
     var start = new Date(); 
     for(var v=0; v<n; v++)
     {
      fn();
     } 
     var stop = new Date();
     return (stop.getTime() - start.getTime());
    }
     
    function test1()
    {
      return (Math.random() > Math.random() ? "aaaa" : "bbbb");
    }
     
    function test2()
    {
     if( Math.random() > Math.random() )
      return "aaaa";
     else
      return "bbbb";
    }
     
    var n = 1000000;
     
    alert("test 1:" + time(test1, n));
    alert("test 2:" + time(test2, n));
    Quelques dizaines de millisecondes pour un million d'it�rations. Bref, du vent...

    M�mes tests, conclusions diff�rentes mdr

  17. #37
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par d�faut
    Chez moi le test de doubleU confirme l'hypoth�se, mais pas le test de le_chomeur!

  18. #38
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    Exp�rience personnel :

    http://easynews.free.fr/calendrier/agenda/

    optimis� au maximum ( � l'�poque, ce code date d'il y a un an ^^ )

    et le "scan" �tant utilis� a chaque changement de cellule, en rempla�ant les ? : par des if/else j'ai une perte cons�quente des performances ...

    d'ou ma pr�cision dans un cas pratique et non pas sur des benchs simples

  19. #39
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par d�faut
    Quel "scan"?

  20. #40
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    pardon, "scan" = mouseover permettant de r�initialiser l'�tat des cellules
    ( spaffy avait suivit le dev de cette appli ^^ )

Discussions similaires

  1. Bonnes pratiques pour la POO en Javascript
    Par piemur2000 dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 05/10/2013, 15h33
  2. bonnes pratiques syntaxe javascript
    Par Invit� dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 27/06/2013, 10h40
  3. Bonnes pratiques de s�curit� en JavaScript
    Par Toulousaing dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 08/04/2012, 19h47
  4. javascript orient� objet: bonne pratique et h�ritage
    Par negstek dans le forum G�n�ral JavaScript
    R�ponses: 9
    Dernier message: 31/08/2011, 19h27
  5. [POO] Bonnes pratiques href="javascript:fonction()"
    Par LhIaScZkTer dans le forum G�n�ral JavaScript
    R�ponses: 20
    Dernier message: 04/04/2009, 18h26

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