Inline Cache

function test(){
	const a = { name: 'a' }
	const b = { name: 'b' }
	const c = { name: 'c' }
	const d = { name: 'd' }
	const e = { name: 'e' }
  const arr = [a,b,c,d,e]
  const getName = (obj) => obj.name;
  for (var i = 0; i < 1000; i++) {
      getName(arr[i & arr.length-1]);
  }
}
test()
function test(){
	const a = { name: 'a', address: 'a' }
	const b = { name: 'b', go: 'b' }
	const c = { name: 'c', apple: 'pie' }
	const d = { name: 'd', phone: 'number' }
	const e = { name: 'e' }
  const arr = [a,b,c,d,e]
  const getName = (obj) => obj.name;
  for (var i = 0; i < 1000; i++) {
      getName(arr[i & arr.length-1]);
  }
}
test()

그림에서 보는 거와 같이 23퍼나 느리다

---

인라인 캐싱의 상태

  • UNINITIALIZED(0)

  • PREMONOMORPHIC(1) - 1번째 접근

  • MONOMORPHIC(1) - 2번째 접근

  • 3번째 접근 (cache hit)

  • POLYMORPHIC(P) - 다른 Shape(Hidden Class)가 접근할 경우. 4개까지 가능.

  • MEGAMORPHIC(N) - 최대 4개 캐시 가능.

http://www.egocube.pe.kr/lecture/content/html-javascript/202003240001

Last updated

Was this helpful?