2013-09-23 2 views
0
var obj = {}; 

Object.defineProperty(this, 'foo', void (obj.value = 0) || obj); 
Object.defineProperty(this, 'foo2', void (obj.value = 1) || obj); 

Object.defineObject, 재사용 객체 또는 객체 리터럴 표기법

Object.defineProperty(this, 'foo', {value:0}); 
Object.defineProperty(this, 'foo2', {value:1}); 


이 두 단지 빨리 실행되는 것처럼하지만, 전자는 GC에 대한 더 나은 것입니까?

+3

당신이 무엇을하려고하는지 잘 모르겠습니다 ... – Neal

+0

당신의 질문은 정확히 무엇입니까? – Bucket

+0

'무엇이든간에 무효 || obj'는 항상'obj'를 리턴합니다. 왜냐하면'void 무엇이든 '은 항상 정의되지 않기 때문입니다. – bfavaretto

답변

1

옵션 B는 두 개의 임시 개체를 만들고 옵션 A는 하나만 만듭니다. 그러나 옵션 B의 임시 객체는 GC에 즉시 적용 할 수 있으며 이론적으로는 옵션 A의 임시 객체보다 더 쉽게 최적화 할 수 있습니다.이 객체는 선언 블록의 끝까지 존재합니다.

실제적인 차이가 거의 없도록하십시오; 이 수준에서 만만치 않은 조기 최적화가 있습니다 (그리고 어쨌든 모든 브라우저에서 가장 빠른 버전을 선택할 수없는 경우가 종종 있습니다). 당신은 훨씬 더 읽기 쉽고 관용적 인 JavaScript 인 옵션 B를 사용해야합니다.

나를위한 FWIW (우분투 13.04 64 비트에서), 5 회 시도에서 100k를 실행하면 Firefox 또는 Chrome에서 일관되게 더 빠른 속도로 실행되지 않습니다. 즉 임의의 노이즈가 성능 차이보다 큽니다.

+0

너무 조숙 한 최적화가 아니기 때문에 (이미 모든 것을 작성했으며 이제 모바일 최적화를 시도하고 있습니다). 위의 코드는 sudo 예제이며 obj는 전역 변수로 저장되며이 목적을 위해 전체 코드 기반에서 재사용됩니다. 성능 테스트를했는데 첫 번째 방법은 실제로 두 번째 방법보다 빠르지 만 gc에 대해서는 더 신경을 썼습니다. gc가 모바일에서 느려짐을 유발하는 것 같습니다. 그래서 나는 이와 같은 최적화를 시도하고 있습니다. 그래서이 객체를 계속 사용한다고 가정하면 더 좋을까요? – user2800679

+0

http://jsperf.com/testtttttt3333 – user2800679

+0

문서 수명 동안 하나의 속성으로 하나의 전역 개체를 유지하는 것은 GC에 전혀 부담이되지 않습니다. 그러나 코드를 읽기 쉽게 만들어서 이해하기가 쉽지 않습니다. 단지 의사 - 사례만으로는 더 자세하게 판단하기 어렵다. 이 예제에서'Object.defineProperty'를 사용하지 않으면 분명히 더 나은 결과를 얻게되어 백배의 속도 향상을 가져옵니다 ... – bobince

관련 문제