2010-04-27 5 views
5

Ich sah Twitter statische Skripte und bemerkte, dass alle Variablen und Funktionen wo nur 1 Zeichen lang, warum und wie machen sie das? Hat es etwas mit Leistung zu tun? Wenn ja, warum geben sie nicht alle Elemente auf ihrer Website mit kurzen Namen, vielleicht 2 statt 1 Zeichen, um Kollisionen zu vermeiden.1-Buchstaben-Namen für Variablen und Funktionen in jQuery, JavaScript

Beispiel:

(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 
} 
}) 

Antwort

19

Dieses Skript wurde „minimiert“, eine automatisierte Technik der Variablen mit kürzeren Namen zu ersetzen, ohne die Funktionalität zu ändern. Siehe zum Beispiel JSMin. Ziel ist es, Downloadzeiten und Bandbreite zu reduzieren, wenn das Skript an einen Client gesendet wird.

+6

Ich denke, dass Crockford diese besondere Technik "Verschleierung" nennt. JSMin ändert keine Variablennamen, weil Crockford die Verschleierung nicht mag, da er es für wahrscheinlich hält, dass es Bugs verursacht – Bob

+0

Guter Punkt. [YUI Compressor] (http://developer.yahoo.com/yui/compressor/) minimiert und "verschleiert". – kevingessner

1

Javascript ist clientseitig, Sie müssen also das Skript laden. Weniger Text zum Herunterladen bedeutet bessere Leistung, denke ich.

0

Viele JavaScript-Projekte führen ihren Code durch einen "Minifier", um den Code kleiner zu machen. Dies verbessert die Zeit, die der Browser benötigt, um die Bibliothek herunterzuladen. Die meisten Projekte liefern auch eine nicht-minimierte Version für Entwickler zu lesen:

Beispiel hier: http://docs.jquery.com/Downloading_jQuery#Current_Release

0

könnte als zu viele Gründe, warum sie dies tun, ein allgemeines zu nennen:

Rückgang der Dateigröße der Skripte, da viele Leute Twitter benutzen.

2

Sie führen ihre Skripts durch etwas wie http://developer.yahoo.com/yui/compressor/, um ihre Größe zu reduzieren, und daher die Zeit, die geladen werden muss.

Dies ist alles getan, um die Ladezeiten der Websites zu verringern.
In den letzten Jahren ist dieses Thema so etwas wie ein neues Feld geworden, vor allem aufgrund von Dingen wie den Reden von Steve Stouders: http://stevesouders.com/