검색 알고리즘
중요도: 5
이번에 풀 과제는 두 부분으로 구성됩니다.
먼저, 아래 객체를 살펴봅시다.
let head = {
glasses: 1
};
let table = {
pen: 3
};
let bed = {
sheet: 1,
pillow: 2
};
let pockets = {
money: 2000
};
__proto__
를 사용해서, 프로퍼티 조회가pockets
→bed
→table
→head
의 경로를 따르도록 하세요.pockets.pen
은table
에 있는3
,bed.glasses
는head
에 있는1
이 되어야 합니다.pockets.glasses
로glasses
를 얻는 것이 빠를까요? 아니면head.glasses
로 얻는 것이 빠를까요? 필요하다면 벤치마크를 사용해 성능을 측정해 보세요.
-
__proto__
를 추가해봅시다.let head = { glasses: 1 }; let table = { pen: 3, __proto__: head }; let bed = { sheet: 1, pillow: 2, __proto__: table }; let pockets = { money: 2000, __proto__: bed }; alert( pockets.pen ); // 3 alert( bed.glasses ); // 1 alert( table.money ); // undefined
-
모던 엔진에선 객체에서 프로퍼티를 가져오는 것과 객체의 프로토타입에서 프로퍼티를 가져오는 것 사이에 성능적인 차이가 없습니다. 모던 엔진은 프로퍼티가 어디서 발견됐는지 기억하고 있다가 다음 요청 시 이 정보를 재사용합니다.
pockets.glasses
을 예시로 들어봅시다. 엔진은glasses
가 발견된 곳(head
)을 기억하고 있다가, 다음 요청부턴 이 프로퍼티가 발견된 곳에서 검색을 시작할 겁니다. 모던 엔진은 뭔가 변화가 생기면 내부 캐시를 변경해줄 정도로 똑똑하기 때문에 최적화를 안전하게 수행해줍니다.