[CS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •
elice/study

[CS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ํ•„์š”ํ•˜๊ณ , ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์—”์ง„์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ๋น„์Šทํ•˜๋‹ค. (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