Javascript
Javascript ๋?
์๋ฐ์คํฌ๋ฆฝํธ ์์ง - V8
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์คํ์ ๋์์ค๋๋ค. ๋ํ์ ์ธ ์์ง์ผ๋ก V8 Engine (Chrome, Node.js ์์ ์ฌ์ฉ)์ด ์์ผ๋ฉฐ, ๊ฐ ๋ธ๋ผ์ฐ์ ๋ณ๋ก ์ฌ๋ฌ๊ฐ์ง ์์ง๋ค์ด ์กด์ฌํฉ๋๋ค.
V8 ์์ง์ด๋?
- Google์ด ์ฃผ๋ํ์ฌ ๊ฐ๋ฐํ ์คํ์์ค์.
- C++๋ก ์์ฑ๋ ๊ณ ์ฑ๋ฅ์ ์๋ฐ์คํฌ๋ฆฝํธ & ์น ์ด์ ๋ธ๋ฆฌ ์์ง์.
- Call Stack ๊ณผ Memory Heap์ผ๋ก ๊ตฌ์ฑ๋์ด ์์.
- ์น ๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ ํฅ์ ๋ฉ์ปค๋์ฆ์ผ๋ก ๋์ ๋์์ผ๋ฉฐ ๋ค๋ฅธ ์์ง๋ณด๋ค ํจ์ฌ ํฅ์๋ ์ธํฐํ๋ฆฌํฐ๊ฐ ๋์์.
⇒ V8๊ณผ ๋ค๋ฅธ ์์ง์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ V8 ์์ง์ JIT(Just In Time) ์ปดํ์ผ๋ฌ์.
- JIT ์ปดํ์ผ๋ฌ๋ ๋ฐํ์์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๊ณ์ด ์ฝ๋๋ ์ปดํ์ผํ๊ณ ์ค๊ฐ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์.
V8 ์์ง์ ๋์ ๊ณผ์
- ์์ค์ฝ๋ ํ์ฑ
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ค์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ๋จผ์ ํ์(Parser)์ ๋๊ธฐ๋ฉด, ์์ค์ฝ๋๋ฅผ ๋ถ์ํ ํ AST(Abstract Syctax Tree,์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ) ๋ก ๋ณํํฉ๋๋ค.
- Ignition ๋ฐ์ดํธ์ฝ๋(ByteCode)๋ก ๋ณํ
- Ignition์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ๋ ์ธํฐํ๋ฆฌํฐ์ด๋ค. ์๋ณธ ์์ค ์ฝ๋๋ณด๋ค ์ปดํจํฐ๊ฐ ํด์ํ๊ธฐ ์ฌ์ด ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ์ฌ, ์์๋ก ์ฝ๋๋ฅผ ํ์ฑํ๋ ์์ ์ ์ต์ํํ๊ณ ์ฝ๋์ ์๋ ์ค์์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ๋๋ค.
- ์ธํฐํ๋ฆฌํฐ(Interpreter)๋?
- ์ปดํ์ผ๋ฌ์ ๋ฐ๋๋ก ์ธํฐํ๋ฆฌํฐ๋ ํ๋ก๊ทธ๋จ ์คํ์ ํ ๋ฒ์ ํ๋ฌธ์ฅ์ฉ ๋ฒ์ญํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ฒ์ ์ ์ฒด๋ฅผ ์ค์บํ๊ณ ์คํํ์ผ์ ๋ง๋ค์ด์ ์คํํ๋ ์ปดํ์ผ๋ฌ๋ณด๋ค ์คํ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค. ์ธํฐํ๋ฆฌํฐ๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๋ค. ๋ํ์ ์ธ ์ธ์ด๋ก Python,Ruby,Javascript ๋ฑ์ด ์์.
- ์ปดํ์ผ๋ฌ๋(Compiler)?
- ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ์ค์บํ์ฌ ์ด๋ฅผ ๋ชจ๋ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ค. ์ ์ฒด๋ฅผ ์ค์บํ๊ธฐ ๋๋ฌธ์ ๋๊ฐ ์ปดํ์ผ๋ฌ๋ ์ด๊ธฐ ์ค์บ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ํ์ง๋ง ์ ์ฒด ์คํ ์๊ฐ๋ง ๋ฐ์ง๊ณ ๋ณด๋ฉด ์ธํฐํ๋ฆฌํฐ๋ณด๋ค ๋น ๋ฅด๋ค. ๋ํ์ ์ธ ์ธ์ด๋ก C,C++,JAVA ๋ฑ์ด ์์.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ์ ํ์ดํ ์ธ์ด๊ฐ ์๋ ๋์ ํ์ดํ ์ธ์ด์ ๋๋ค. ์์ค์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ์๋ ์ ์ ์๋ ๊ฐ๋ค์ด ๋๋ฌด ๋ง์ ์ต์ ํ๊ฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ๋๋ฌธ์ ๋ชจ๋ ์์ค๋ฅผ ํ ๋ฒ์ ํด์ํ๋ ์ปดํ์ผ ๋ฐฉ์์ด ์๋ ์ฝ๋ ํ ์ค์ฉ ์คํ๋ ๋๋ง๋ค ํด์ํ๋ ์ธํฐํ๋ฆฌํธ ๋ฐฉ์์ ์ฑํํ์ฌ ์ธ ๊ฐ์ง ์ด์ ์ ๊ฐ์ ธ๊ฐ๊ณ ์ ํ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์ : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผํ๋ ๊ฒ๋ณด๋ค ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ ํ๋ ๊ฒ์ด ๋ ํธํ๋ค.
- ํ์ฑ ์ ์ค๋ฒํค๋ ๊ฐ์ : ๋ฐ์ดํธ ์ฝ๋๋ ๊ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๋ค์ ํ์ฑ ํ๊ธฐ ํธํ๋ค.
- ์ปดํ์ผ ํ์ดํ๋ผ์ธ์ ๋ณต์ก์ฑ ๊ฐ์ : TurboFan์ ํตํ Optimizing ํน์ Deoptimizing ์ฒ๋ฆฌ์์๋ ๋ฐ์ดํธ์ฝ๋๊ฐ ํธํ๋ค.
- TurboFan์ผ๋ก ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ปดํ์ผ
- TurboFan์ด๋?
- TurboFan์ V8 v5.9 ๋ฒ์ ์ด์ ์ ์ฌ์ฉ๋์๋ Crankshaft ์ปดํ์ผ๋ฌ๋ฅผ ์์ ํ ๋์ฒดํ ์ต์ ํ ๋ด๋น ์ปดํ์ผ๋ฌ์.
- TurboFan์ ๋ฐ์ดํธ ์ฝ๋๋ก ์์๋ก ๋ณํํ๋ ๊ณผ์ ์ ์ต์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋จ.
- V8 ๋ฐํ์ ์ค์ Profiler์๊ฒ ํจ์๋ ๋ณ์๋ค์ ํธ์ถ ๋น๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ผ๋ผ๊ณ ์ํค๋ฉฐ ์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ TurboFan์ด ์๊ธฐ ๊ธฐ์ค์ ๋ง๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ์ต์ ํ๋ฅผ ์ํด.
TurboFan ์ต์ ํ ๊ธฐ๋ฒ
- Hidden Class
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค๊ฐ ์๊ณ ๋์ Prototype์ด๋ผ๋ ๊ฐ๋ ์ด ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์์ ์ฌ์ฉ๋๋ Number,Boolean ๋ฑ๊ณผ ๊ฐ์ ์ ์ ํ์ ๋ฐ์ดํฐ ์ธ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์ทจ๊ธ๋จ.
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๋ด๋ถ์ Hidden Class๋ผ๋ ๊ฐ๋ ์ ์ด์ฉํ์ฌ ๊ฐ ๊ฐ์ฒด์ ๋ํ ์์ฑ ๊ฐ์ ํฌ์ธํฐ๋ง ๊ฐ์ง๊ณ , ํด๋น๋๋ ๊ตฌ์กฐ๋ฅผ ์ฐธ์กฐํจ.
- Inline Caching
Javascript ์์ง ๊ตฌ์กฐ๋
V8 ์์ง์ ๊ตฌ์กฐ๋๋ฅผ ๊ฐ๋จํ ๋ํ๋ธ ๊ทธ๋ฆผ
์์ง์ ์ฃผ์ ๋ ๊ตฌ์ฑ์์๋
- Memory Heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๋ ๊ณณ
- Call Stack : ์ฝ๋ ์คํ์ ๋ฐ๋ผ ํธ์ถ ์คํ์ด ์์ด๋ ๊ณณ
์ฐธ๊ณ ์๋ฃ: ์ฐธ๊ณ ์๋ฃ:
์ปดํ์ผ๋ฌ(compiler)์ ์ธํฐํ๋ฆฌํฐ(interpreter)์ ์ฐจ์ด
[2020.10.16] Google Chrome V8 ์์ง์ ํํค์ณ๋ณด์
์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์๋ฆฌ: ์์ง, ๋ฐํ์, ํธ์ถ ์คํ
'Web > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] ์ด๋ฒคํธ ๋๋ฉํฐํ๋ ์ฑ (0) | 2024.03.05 |
---|---|
Node.js ๋? (0) | 2024.03.05 |
[Javascript] ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ (0) | 2024.02.05 |