2012-07-20 4 views
7

내가 조사 할 기회가 없다는 간단한 질문. 통화/응용 프로그램과 같은 종류의 응용 프로그램에서 사용할 때 더 많은 성능을 제공합니다 : Array.prototype vs []?Array.prototype vs [] perf

예컨대 :

function test1() { 
    return Array.prototype.splice.apply(arguments, [1, 2]); 
} 

test1([1,2,3,4,5,6,7,8,9]); 

function test2() { 
    return [].splice.apply(arguments, [1, 2]); 
} 

test1([1,2,3,4,5,6,7,8,9]); 

내 생각 : 나는 프로토 타입 기능을 재사용 할 수없고 문자 필요가 생성되지 때문에 Array.prototype 방법은 더 성능이 좋은 가정 것이다. 그래도 정말로. (크롬) JSPerf를 사용

Array.prototype 모양이 약간 실제로 더 확대됨에 있습니다 :

http://jsperf.com/array-perf-prototype-vs-literal

+0

나열된 이유로 'Array.prototype.splice'가 더 빠를 것으로 기대합니다. 추가 개체 생성이 없습니다. 그러나 이것은 기껏해야 마이크로 최적화이며 이러한 상황에서 가독성에 중점을 두어야합니다. – Matt

+0

* 동의 함 * 귀하의 의견으로 어느 것이 더 읽을 수 있습니까? 나는 Array.prototype에 의지 할 것이지만 libs 등에서 사용되는 []을 계속 보게 될 것이다. –

+0

Dpolehonski가 바이트 감소에 대한 그의 답변에서 좋은 점을 만들었지 만, 필자는 그것의 'Array.prototype'에도 동의 할 것이다. '[] '을 사용할 때. 두 접근법의 장점은 너무 작아서 다른 어떤 것보다 개인적 선호도가 더 낮다고 생각합니다. – Matt

답변

3

그것은 그것을 실행하는 브라우저에 따라 달라집니다. 크롬에서는 .prototype이 더 빠르다고 보이지만 파이어 폭스는 일반적으로 크롬보다 느리지 만 두 가지 사이에는 차이가 없다고합니다. IE9는 .prototype의 속도가 크게 향상되었지만 가장 느린 브라우저입니다.

그러나 이러한 종류의 최적화는 너무 작아서 저장된 시간이 코드를 읽는 데 필요한 여분의 바이트에 대해 상쇄 될 수 있다고 주장 할 수 있습니다. 나는 빗나간 다. 만약 이것이 가장 큰 성능 이슈라면, 당신은 그때 당신이 정말로 최적화에 어떤 문제도 갖지 않는다!

는 편집 :

은 내가 IE, 크롬과 파이어 폭스 양쪽 모두보다 빠른로 나타났다 스플 라이스 함수를 호출하는 함수에 전달 된 배열을 사용하는 추가 테스트 here을 추가했습니다. 필자가 결론을 내렸을 때, 이미 배열을 편리하게 사용했다면 그것을 사용하고, 그렇지 않으면 프로토 타입을 사용한다.

+0

정말로 감사합니다. 배열 fn 캐시 아이디어는 영리합니다. 나는 여러 브라우저에서 개정판을 시험해 보았고 같은 결론을 내렸다. 브라우저 JS 엔진에 의존한다. 또한 마이크로 최적화에 동의했습니다. 내 perf 문제의 대부분은 DOM 상호 작용에서 왔습니다 .. –

관련 문제