2013-02-24 3 views
2

나는 현재 내 모든 스크립트의 필요한이 유사한 전역 개체에 캐시 요소가 있습니다 그때마다 직접 개체에 액세스 할 수 내 방법 내부반환 자바 스크립트의 변수 및 성능

var MainObject={ 
    $El1 : $('#element1'), 
    $El2 : $('#element2') 
    }; 

합니다.

method1:function(){ 
    MainObject.$El1 // DO SOMETHING WITH THIS ELEMENT 
}, ... 

그래서 두 가지 질문이 있습니다.

로컬 변수가 가장 빠르다는 것을 읽었습니다. 그렇게 내 방식을 쓰는 것이 낫겠습니까? 나는 응축하는 가장 좋은 방법 일 것입니다 무슨 (빨리 꽤 라인으로 전환 할 수있는) 이러한 요소를 참조 내 스크립트에 많은 방법이있는 경우

method1:function(){ 
    var $El1=MainObject.$El1; 
    $El1 // DO SOMETHING WITH THIS ELEMENT 
}, ... 

만일 그렇다면

...

그들?

method1:function(){ 
    var $El1=MainObject.$El1, 
     $El2=MainObject.$El1, 
     $El3=MainObject.$El1, 
     $El4=MainObject.$El1; 

    $El1 // DO SOMETHING WITH THIS ELEMENT 
}, 

method2:function(){ 
    var $El1=MainObject.$El1, 
     $El2=MainObject.$El1, 
     $El3=MainObject.$El1, 
     $El4=MainObject.$El1; 

    $El1 // DO SOMETHING WITH THIS ELEMENT 
}, 

method3:function(){ 
    var $El1=MainObject.$El1, 
     $El2=MainObject.$El1, 
     $El3=MainObject.$El1, 
     $El4=MainObject.$El1; 

    $El1 // DO SOMETHING WITH THIS ELEMENT 
}, 

고마워요!

+1

아니요, 실제로 당신은 트랙에서 멀어지고 불가능합니다 :-) – Bergi

+0

불가능한 것은 무엇입니까? 좀 더 자세한 정보를 제공해 줄 수 있습니까? – Aaron

+0

다른 범위에서 변수를 선언하는 함수를 작성합니다. – Bergi

답변

3

해결 방법이 필요한 특정 방법에서 실제로 성능 문제가 있음을 측정하기 전에 조기 최적화를위한 코드를 추가하는 것은 거의 불가능합니다. 더 많은 코드 행을 추가하고 작성하는 데 시간이 오래 걸리고 실제 문제를 해결하지 못하는 경우가 많습니다.

그런 다음 성능 문제가있을 때 실제로 측정하는 방법의 요지를 신중하게 측정해야합니다.


예, 지역 변수는 전역 변수보다 빠릅니다 (전역 범위가 변수 이름을 확인하기 전에 검색됩니다). 예, MainObject.$EL1의 여러 참조가 단일 로컬 참조보다 느립니다.


다음은 일반적인 경험 법입니다. 메소드에서 단지 MainObject.$EL1 같은 것을 한두 번 사용한다면, 로컬 변수에 캐싱하는 것이 이점이 거의 없습니다. 세 번 이상 사용하는 경우 모든 추가 조회를 방지하기 위해 로컬로 캐시하는 것이 좋습니다. 나는 일반적으로 C++에서와 같이 javascript에서 동일한 작업을 수행합니다.

실제 성능 문제가 있고 더 빠르게 작업하려는 경우 성능 문제의 주된 원인에 대한 첫 번째 직감이 거의 올바르지 않습니다. 따라서 프로필을 작성하고 실제로 가장 많은 시간을 사용하고있는 것이 무엇인지 찾아내는 것이 좋습니다. 그런 다음 변경 작업을 수행 할 때 변경 사항의 영향을 측정하여 코드를 추가 할 때 실제로 차이를 만들고 있음을 알 수있는 방법이 필요합니다.

+0

질문에 답변 해 주셔서 감사합니다. : p 네, 메서드에서 여러 번 객체가 사용되고 있으므로 캐시하고 싶습니다. 스크립트가 완료되었습니다, 지금은 최적화 중입니다. 나는 줄 수를 줄이려고 노력하고 있는데 이것은 내가 할 수있을 거라 생각한 곳이다. 여러 방법으로 이들을 응축시킬 방법이 있는지 알고 있습니까? – Aaron

+0

@Aaron - 가독성을 높이고 싶다면 여러 줄이 아닌 하나의 긴 줄을 사용할 수 있습니다. 그러나 이것들을 모두 지역 변수로 가져 오는 다른 빠른 방법은 없습니다. – jfriend00

+0

답장을 보내 주셔서 감사합니다. – Aaron

1

getElements() 기능은 불가능

범위 변수도 사라 이상되면 지역 변수가 .. 범위로 끝납니다 ..

당신이 우수한 게시물을 읽어야 JavaScript Variable ScopeVariable Scope

+0

OK, 그래서 vars를 반환하는 것은 의문의 여지가 없습니다. 그것은 긴 샷 이었지만 각 메소드의 상단에있는 var 선언을 압축하는 더 좋은 방법이 있는지 궁금합니다. – Aaron

+1

왜 내부에 필요한 모든 참조가있는 로컬 객체를 만들지 않습니까? 이것은 당신의 작업을 성취하는 가장 빠른 방법입니다. 그들은 당신을 메모리에 연결하는 두 경로 일 것입니다. 하나는 로컬 obj에, 다른 하나는 당신의 var에 있습니다.이 방법은 'localObj.myVar' – thiagoh

+0

생성하지 않을 것입니다./로컬 객체를 참조하는 것이 로컬 변수를 참조하는 것보다 느리고 길이는 거의 같을까요? 다른 방법을 통해 반복적 인 선언을 줄이는 데 어떻게 도움이 될지 모르겠습니다. – Aaron

0

로컬 변수는 더 빠르지 만 많이는 아닙니다. 함수 내에서 여러 번 변수에 액세스해야만 값을 로컬 변수에 복사하는 데 걸리는 시간을 만회 할 수 있습니다.한 번만 사용하면 그 시간을 낭비하게됩니다. 여기

는 성능 테스트입니다 : http://jsperf.com/variables-vs-properties-2

뿐만 아니라 당신은 객체에 속성을 찾고 로컬 변수를 사용하여 사이에 큰 차이는, 당신은 또한 당신이 수백만을 할 필요가 있음을 알 수 없다는 것을 볼 수 있습니다 그 차이가 눈에 띄기 전에

관련 문제