2011-09-10 2 views
1

나는 자바 스크립트의 내장 배열 클래스를 수정하는 다른 방법의 속도에 대한 호기심, 그래서 조금 시험했다 :맞춤 배열이 바닐라 버전보다 느린 이유는 무엇입니까?

http://jsperf.com/array-vs-custom-array

이 배열에 제거 기능을 추가하는 세 가지 방법을 비교합니다. Object.create()로 추가 된 remove() 함수는 .call()과 동일한 함수보다 느리거나 (Chrome에서 ~ 90 %) Array.prototype에 추가 된 것 같습니다. 그들은 모두 똑같은 일을하고 실제로 같은 기능을합니다. 그래서 나는 속도 차이가있는 이유에 대해 궁금합니다.

답변

0

제 생각에는 함수 조회 시간이 합산됩니다.

첫 번째 경우에는 remove의 주소를 조회 했으므로이 함수를 호출하는 것이 간단합니다.

Object.create() 메서드는 먼저 Array.prototype을보고 새 개체의 속성에서 찾아야합니다.

마지막 프로토 타입 대체 방법은 프로토 타입의 함수에 대한 검색 시간을 초래합니다.

이 가설을 테스트하는 방법을 모르겠지만, 파이썬 코드를 최적화하기 전에 이와 비슷한 것을 보았습니다.

+0

흥미 롭다. 필자는 필자가 작성한 예제에서 필자가 배열에 add remove를 생성 한 후에 테스트를 수정했다. 그것은 초콜릿 Object.create() 메소드와 가장 빠르고 기능적으로 유사하지만, .remove가 열거 가능하다는 단점이 있습니다. http://jsperf.com/array-vs-custom-array/3 – notlion

+0

또한 함수 호출이 먼저 직접 객체를 살펴보고 프로토 타입에서 _then_이라는 인상을 받고있었습니다. 초콜렛과 바닐라가 동일하지 않아야합니까? Hrm .. – notlion

+0

이 시험에 여전히 관심이있는 경우, 시간 문제가 너무 많다는 것이 문제의 일부라고 생각합니다. 푸시 콜을 테스트 설정으로 이동하면 제거 성능이 세 가지 유형 모두에서 비슷합니다. http://jsperf.com/array-vs-custom-array/4 – myeeshen

관련 문제