검색 알고리즘
중요도: 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)을 기억하고 있다가, 다음 요청부턴 이 프로퍼티가 발견된 곳에서 검색을 시작할 겁니다. 모던 엔진은 뭔가 변화가 생기면 내부 캐시를 변경해줄 정도로 똑똑하기 때문에 최적화를 안전하게 수행해줍니다.