elice/study

[CS] μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” κ³Όμ •

건망디 2022. 1. 29. 00:48

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 ν•„μš”ν•˜κ³ , μ›Ή λΈŒλΌμš°μ €λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진을 λ‚΄μž₯ν•˜κ³  μžˆλ‹€.

λΈŒλΌμš°μ €λ§ˆλ‹€ μ—”μ§„μ˜ μ’…λ₯˜κ°€ λ‹€λ₯΄μ§€λ§Œ, μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 방식은 λΉ„μŠ·ν•˜λ‹€. (V8, SpiderMonkey, Javascript core λ“±μ˜ κ΅¬ν˜„μ΄ 각각 λ‹€λ₯΄λ‹€.)

 

좜처: https://medium.com/@sanderdebr/a-brief-explanation-of-the-javascript-engine-and-runtime-a0c27cb1a397
좜처: https://mathiasbynens.be/notes/shapes-ics

 

1. μ†ŒμŠ€μ½”λ“œλ₯Ό λ§Œλ‚˜λ©΄ νŒŒμ‹±ν•˜μ—¬ AST(Abstract Syntax Tree)둜 λ³€ν™˜ν•œλ‹€.

2. 인터프리터(Interpreter)λŠ” ASTλ₯Ό 기반으둜 λ°”μ΄νŠΈμ½”λ“œ(Bytecode)λ₯Ό μƒμ„±ν•œλ‹€.

3. 인터프리터가 λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ, 자주 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜ 및 νƒ€μž… 정보 등이 μžˆλŠ” ν”„λ‘œνŒŒμΌλ§ 데이터(Profiling data)와 같이 μ΅œμ ν™” 컴파일러(Optimizing compiler)μ—κ²Œ 보낸닀.

4. μ΅œμ ν™” μ»΄νŒŒμΌλŸ¬λŠ” ν”„λ‘œνŒŒμΌλ§ 데이터λ₯Ό 기반으둜 μ΅œμ ν™”λœ μ½”λ“œ(Optimized code)λ₯Ό μƒμ„±ν•œλ‹€.

5. ν•˜μ§€λ§Œ, ν”„λ‘œνŒŒμΌλ§ 데이터 쀑에 잘λͺ»λœ 뢀뢄이 μžˆλ‹€λ©΄ μ΅œμ ν™” ν•΄μ œ(Deoptimize)λ₯Ό ν•˜κ³  λ‹€μ‹œ λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•΄μ„œ 이전 λ™μž‘μ„ λ°˜λ³΅ν•œλ‹€.

 

 

 

μ°Έκ³ 

https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/frontend/engine.md