# hidden class

3개의 포스트
post-thumbnail

제멋대로 JS 객체 프로퍼티를 읽어내는 법(feat.V8 Hidden Class)

이번 포스팅의 목적은 다음과 같습니다. 타입이 마구 변하는 JS 객체의 프로퍼티를 어떻게 빨리 읽어내는가에 대한 호기심 해결 이왕이면 불필요한 동적 타이핑 남발을 자제하며 최적화할 수 있는 관점 생각해보기 🚩 사전 정보 객체 메모리 저장 : 메모리 오프셋 0⬛⬛ 1⬜⬜⬜2⬛⬛⬛ 기본적으로 객체의 프로퍼티에 접근하면 객체의 기준 메모리 주소와 상대적인 값인 오프셋을 통해 값을 읽어냅니다. 각각의 오프셋은 들어올 데이터 타입을 통해 결정합니다. (number: 8byte, string: 문자열 참조값...) 정적 타이핑 언어(C++, Java ...) 컴파일 이전에 객체 레이아웃이 고정되기 때문에 이때 고정된 오프셋으로 프로퍼티에 바로 접근 가능 Javascript는 동적 타이핑 언어다 동적 타이핑 언어로 구현되어 프로퍼티의 데이터 타입이나 순서, 갯수가 언제 어떻게 바뀔지 모릅니다. 즉, 선

2022년 8월 7일
·
1개의 댓글
·

자바 스크립트 코드의 최적화를 위해: 히든 클래스(hidden class)와 인라인 캐싱(inline-caching )

자바 스크립트 코드의 최적화를 위해: 히든 클래스(hidden class)와 인라인 캐싱(inline-caching ) > 자바스크립트 코드 최적화를 위해 알아두면 좋을 점인 히든 클래스와 인라인 캐싱에 대해 알아보자. > > Today, we discuss about the hidden class and line caching for the writing optimized code. Writing Optimzied Javascript Code > 코드를 최적화 하기 위해서는 아래의 > Eval(), arguments , for in , with , delete 이 5가지를 조심해야한다. 히든 클래스(hidden classes) 위의 예제를 보며 알아보자. 히든 클래스도 자바스크립트 엔진의 컴파일러가 내부적으로 최적화 시켜 활용하는 도구 중 하나이다. obj1 과 obj2는 앞서 선언했을 때는 동일한 Animal을 공유하는 클래스로 인지 한다. 그런

2021년 3월 22일
·
0개의 댓글
·

[JavaScript] Optimization - Inline Caching & Hidden Class

JavaScript Engine(이하 JSE)인 V8의 Ignition이 Interpreting으로 Bytecode를 생성하고 실행하면서 Profiling data와 함께 TurboFan으로 Bytecode를 보내는 것을 알았다. 여기서 TurboFan의 역할은 최적화된 Machine Code를 만들어내는 것이다. 어떻게 만드는 것일까? 그 과정인 Inline Caching과 Hidden Class에 대해서 알아보자. Inline Caching 말 그대로 캐싱이다. 효율성을 위해 자주 사용하는 데이터를 빠른 속도로 접근하기 쉬운 곳에 저장해두고 사용하는 것이다. 아래 코드를 보자. 이 코드가 반복된다면 getName이라는 함수에 의해 This is DevJoong 이라는 문구가 계속 만들어질것이다. 똑같은 내용이 리턴되는데 반복해서 객체에서 name을 찾을 필요가 없으므로 compiler(TurboFan)은 This is ${obj.name}을 `This is D

2021년 1월 2일
·
0개의 댓글
·