2013-01-18 2 views
-1

나는 시나리오 두 쌍을 테스트했다.즉시 실행 기능의 성능

(function(){ 
    var d = document; 
    //do the same stuff 
    return //something 
})(); 

결과가 브라우저에서 브라우저까지 버전마다 다르며 테스트에서 테스트까지 다양합니다.

2.) XMLHttpRequest를 통해 얻은 큰 데이터 객체가 있습니다. 이 객체가 여러 가지 방법으로 액세스되지만 부모 함수의 범위에서 하나만 관련이 있다고 가정 해 보겠습니다.

(function(){ 
    //get data object 
    var data = response; 
    //change GUI, assign events, do some other stuff 
    var searchInData = function(id){ //this will be used often 
     //code 
    }; 
    //data object won't be accessed any more 
    //a lot of code 
    return //something 
})(); 

... 또는 이것을 사용 하시겠습니까?

(function(){ 
    var search = (function(){ 
     var data = response; 
     //change GUI, assign events, do some other stuff 
     return function(id){ 
     //code 
     } 
    })(); 
    //other stuff 
    return //something 
})(); 

다시 말해 명확한 결과를 얻을 수 없었습니다. 사용하려는 이유와 이유는 무엇입니까?

+3

가장 단순하고 명확하게 읽을 수있는 코드를 사용하십시오. 같은 코드를 작성하는 방법은 무한히 많습니다. – Jon

+0

차이점은 아마도 최소한이지만 테스트하기 가장 좋은 곳은 http://jsperf.com/ – ManseUK

답변

2

1 결과는 브라우저에서 브라우저까지 버전마다 다르며 테스트에서도 테스트에 이르기까지 다양합니다.

그런 다음 더 잘 읽은 것을 사용하십시오. 옵션 # 1은 예를 들어 작성하기가 적지 만 긴 함수의 경우 설명적인 매개 변수를 이해하기 어렵습니다 (변수가 무엇을 포함하는지 알기 위해 아래로 스크롤해야 함).

2 폐쇄를 사용 하시겠습니까?

나는 //a lot of code이 관련이 있다고 생각합니다. 두 함수 모두 해당 코드의 범위에있는 변수에 액세스 할 수 있으며 클로저 (옵션 # 2)를 사용하지 않으면 많은 코드에 범위에 로컬 변수가 있습니다. 클로저를 사용하면 브라우저에서 가비지 수집을 최적화하고 메모리 관리를 향상시킬 수 있습니다. 그러나 이것은 //other stuff이 실제로 무엇인지에 달려 있습니다. 비동기 코드의 경우 클로저를 권합니다.

+0

// 많은 코드 또는 기타 물건 = 더 많은 아약스 호출, 더 많은 계산 등이 필요하며 데이터 객체에 액세스하지 않아도됩니다. 그냥 검색 기능을 사용하십시오. // GUI를 변경하고, 이벤트를 할당하고, 그 범위에서 하나의 변수에 접근하는 다른 것들을 수행한다. – Tondo

+0

...하지만'search'는'data' 객체를 사용합니다. 나는 당신의 코드를 정확하게 알지 못하지만 나중에 필요하지 않게 될 변수를 가비지 컬렉터 블 (garbage-collectable)로 만들려고 노력한다. 특히 GUI 이벤트 핸들러의 범위를 벗어나십시오. – Bergi

+0

그것이 문제입니다. 나는 매우 특정한 계층 구조를 가진 거대한 데이터 객체를 가지고 있으며, 작업은 데이터를 breadcrumb 형태로 표시하는 것이었다. = 요소, 이벤트, 핸들러를 생성하고 삭제한다. 그래서 나는 그것에 대해 생각하고 있었다. 데이터 객체, DOM 객체, 특정 변수 및 이벤트 핸들러를 하나의 개별 블록으로 통합합니다. 검색은 나중에 다른 이유로 사용되지만 데이터 객체에 대한 액세스 권한이 있어야합니다. 데이터 객체는 전체 세션 동안 변경되지 않습니다. – Tondo