2010-04-27 7 views
5

Je regardais les scripts statiques de Twitter et j'ai remarqué que toutes les variables et fonctions ne comportaient qu'un seul caractère, pourquoi et comment font-ils cela? Cela a-t-il quelque chose à voir avec la performance? Si oui, pourquoi ne donnent-ils pas à tous les éléments sur leur site web ce genre de noms courts, peut-être 2 caractères au lieu de 1 pour éviter toute collision.Noms à une lettre pour les variables et les fonctions dans jQuery, JavaScript

Exemple:

(function (A) { 
A.fn.isScreenNameField = function() { 
    return this.each(function() { 
     var M = A(this); 
     var F = A("#signup_username_url"); 
     var E = A("#screen_name_info"); 
     var D = A("#avail_screenname_check_indicator"); 
     var O; 
     var C; 
     var I; 
     var N = M.val(); 
     var G = N; 
     var H = N != ""; 
     var Q = /[a-zA-Z0-9_]/; 

     function K() { 
      if (H) { 
       F.html(M.val()) 
      } 
     } 
     function L() { 
      M.trigger("show-info"); 
      E.hide(); 
      D.show() 
     } 
     function B() { 
      E.show(); 
      D.hide() 
     } 
     function P() { 
      G = O; 
      jQuery.ajax({ 
       type: "GET", 
       url: "https://stackoverflow.com/users/username_available", 
       data: { 
        username: O 
       }, 
       dataType: "json", 
       success: function (R) { 
        if (C) { 
         var S = R.msg; 
         if (R.valid) { 
          M.trigger("is-valid"); 
          F.removeClass("invalid").addClass("valid") 
         } else { 
          M.trigger("is-invalid", R.msg); 
          F.addClass("invalid").removeClass("valid") 
         } 
        } 
       }, 
       beforeSend: null, 
       complete: function() { 
        clearTimeout(twttr.timeouts.availabilityTimeout); 
        B() 
       } 
      }) 
     } 
     function J(R) { 
      O = M.val(); 
      clearTimeout(twttr.timeouts.availabilityTimeout); 
      C = O.match(Q); 
      if (!C) { 
       G = O; 
       B(); 
       return 
      } 
      if (O == G) { 
       return 
      } 
      L(); 
      twttr.timeouts.availabilityTimeout = setTimeout(P, 2000) 
     } 
     M.isSignupFormField({ 
      validateWith: function (R) { 
       if (isBlank(R)) { 
        return _("Please enter a user name") 
       } else { 
        P() 
       } 
      }, 
      allowInput: Q 
     }); 
     M.keyup(function (R) { 
      if (jQuery.inArray(R.keyCode, [16, 17, 18, 20, 27, 33, 34, 35, 37, 38, 39, 40, 144]) == -1) { 
       if (M.val() != "") { 
        H = true 
       } else { 
        M.trigger("show-info") 
       } 
       K(); 
       J() 
      } 
     }); 
     M.bind("value-changed", P); 
     M.bind("custom-validate", P) 
    })P 
} 
}) 

Répondre

19

Ce script a été "minified", une technique automatisée de remplacement des variables avec des noms plus courts, sans changer la fonctionnalité. Voir JSMin, par exemple. L'objectif est de réduire les temps de téléchargement et la bande passante lors de l'envoi du script à un client.

+6

Je pense que Crockford appelle cette technique particulière "obfuscation". JSMin ne modifie pas les noms de variables parce que Crockford n'aime pas l'obscurcissement car il le juge trop susceptible de causer des bugs – Bob

+0

Bon point. [YUI Compressor] (http://developer.yahoo.com/yui/compressor/) minimise et "obfuse". – kevingessner

1

Javascript est côté client, vous devez donc charger le script. Moins de texte à télécharger signifie une meilleure performance, je pense.

0

De nombreux projets javascript exécutent leur code via un 'minifier' pour réduire le code. Cela améliore le temps nécessaire au navigateur pour télécharger la bibliothèque. La plupart des projets fournissent également une version non minified pour les développeurs à lire:

Exemple ici: http://docs.jquery.com/Downloading_jQuery#Current_Release

0

Peut-être beaucoup de raisons pour lesquelles ils le font, pour nommer une commune:

Diminution de la taille de fichier des scripts comme beaucoup de gens utilisent Twitter.

2

Ils exécutent leurs scripts à travers quelque chose comme http://developer.yahoo.com/yui/compressor/ afin de réduire leur taille, et donc le temps nécessaire pour charger.

Tout est fait pour réduire les temps de chargement des sites Web.
Ces dernières années ce sujet est devenu quelque chose comme un nouveau domaine, en particulier en raison de choses comme les discours de Steve Stouders: http://stevesouders.com/