2012-11-06 2 views
2

아래 두 기능의 차이점을 설명 할 수 있습니까?이 JavaScript 최적화입니까?

자바 스크립트 엔진이 일종의 나노 최적화를 수행하는지 궁금합니다.

function withoutVar() {                             
    return 'stackoverflow';                              
} 
function withVar() { 
    var result = 'stackoverflow'; 
    return result; 
} 
var a = withoutVar(); 
var b = withVar(); 
+0

나는 실제적인 차이가 없다고 생각한다. 리턴 값을 얻은 후에 변수 get은 제거되고 실행 속도에는 거의 영향을 미치지 않을 것이다. 당신은 하나의 불필요한 var를 저장하고 있습니다. – Christoph

+0

둘 다 같은 일을합니다. 폐쇄가 도입되지 않았습니다. "잃어버린 참조"가 없습니다. 코드에 몇 가지 문자를 추가하기 만하면됩니다. – Joseph

+3

[ "이것은 미트볼 (Meatballs)의 빌 머레이 (Bill Murray)의 말을 염두에 둡니다. 그건 중요하지 않습니다. 단지 중요하지 않습니다!"] (http://www.codinghorror.com/blog/2005/01/micro-optimization - and-meatballs.html) – jbabey

답변

4

의 차이는 구현이 발생 withVar 함수는 기저의 활성화 개체 각각 어휘 환경 기록에 액세스 할 수 있다는 것입니다. 따라서 기술적으로이 함수는 더 느리게 실행되지만, 미세 최적화과 같은 의미 일 뿐이지 만 나노 최적화는입니다.

일부 브라우저는 실제로 코드를 return 진술 withVar으로 최적화 할 수 있습니다. 웹킷 이상 또는 크롬V8 엔진이 그 중 하나입니다. 어느 쪽이든, 다시 말하지만, 이것은 매우 사소한 일이며 여기서 런타임 성능에 대해 걱정하지 않아야합니다. 내 컴퓨터 (크롬)에

JSPerf benchmark

차이에 대한 0.32% ~ 7.000.000 통화에 대한 것입니다.


나는이처럼 전 기능이 덜 문자에 맞는지, 물건에 판매 고려할 유일한 인수입니다. 그렇게하면 파일 크기를 최적화하고 트래픽을 줄일 수 있습니다 (그렇다하더라도 실제로 실행되기 전에 많은 경우에 그러한 문을 최적화해야합니다)

7

일부 엔진은 이러한 최적화를 수행 할 수 있습니다. Google Closure compiler은 확실히 그렇게 :

function withVar(){return"stackoverflow"}var a=withVar(); 

속도에서 거의 차이가 없을 것이지만, "최적화 된"버전이 짧아 (클라이언트가 다운로드 할 수 있으므로 빨리)입니다. 여기 a benchmark의 결과입니다 :

enter image description here

당신은 (변수 선언없이) "평면"버전이 소폭 빠른 볼 (그러나 초당 작업을 볼 수

는 - 이것도 가치가 없어 최적화입니다 속도에 관해서 생각하는 것).

+0

James를 어떤 벤치마킹을 했습니까? –

+0

@ FrançoisB. - 무슨 뜻인지 모르겠다. 대답에서 http://jsperf.com의 테스트 케이스에 연결했습니다. –

+0

나는 jsperf를 찾고 있었다. 감사합니다;) –

관련 문제