2010-04-27 3 views
5

저는 Twitter의 정적 스크립트를보고 모든 변수와 함수가 단지 1 문자 길이로 왜, 왜 그리고 어떻게해야하는지 알았습니까? 실적과 관련이 있습니까? 그렇다면 왜 웹 사이트의 모든 요소에 짧은 이름이 올지, 충돌을 피하기 위해 1 자 대신 2자를 길게 입력하는 것이 좋습니다.jQuery, JavaScript의 변수 및 함수에 대한 1 문자 이름

예 :

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

답변

19

이 스크립트 "축소 된"되어, 기능을 변경하지 않고, 짧은 이름 변수를 교환하는 자동화 방법. 예를 들어 JSMin을 참조하십시오. 목표는 스크립트를 클라이언트에 보낼 때 다운로드 시간과 대역폭을 줄이는 것입니다.

+6

Crockford는이 특정 기술을 "난독 화"라고합니다. Crockford는 버그가 발생할 가능성이 너무 높기 때문에 난독 화를 싫어하기 때문에 JSMin은 변수 이름을 변경하지 않습니다. – Bob

+0

좋은 지적입니다. [YUI Compressor] (http://developer.yahoo.com/yui/compressor/)는 모두 축소되고 "난독 화"됩니다. – kevingessner

1

자바 스크립트는 클라이언트 측이므로 스크립트를로드해야합니다. 다운로드 할 텍스트가 적을수록 더 나은 성능을 의미한다고 생각합니다.

0

많은 자바 스크립트 프로젝트는 코드를 작게 만들기 위해 'minifier'를 통해 코드를 실행합니다. 이렇게하면 브라우저에서 라이브러리를 다운로드하는 데 걸리는 시간이 단축됩니다. 여기

예 :

감소 : http://docs.jquery.com/Downloading_jQuery#Current_Release

0

들이 이렇게 이유에, 일반적인 하나의 이름을 많은 이유가 될 수 개발자가 읽을 대부분의 프로젝트는 비 축소 된 버전을 제공 많은 사람들이 트위터를 사용하여 스크립트의 파일 크기를 조정합니다.

2

크기를 줄이기 위해 http://developer.yahoo.com/yui/compressor/과 같은 스크립트를 실행하므로로드해야하는 시간입니다.

이것은 웹 사이트로드 시간을 줄이기 위해 모두 완료되었습니다.
최근이 주제는 특히 스티브 스터 더스 (Steve Stouders)와의 협의와 같은 새로운 분야와 같은 것이되었습니다 : http://stevesouders.com/

관련 문제