jsλ₯Ό 곡λΆνλ©° λλ μμ§μ μ»΄νμΌ κ³Όμ μ μμμΌ νλ μ΄μ (μμ±μ νΌμ ):
1. μμ±μμ μ Chrome V8μ΄ μΈκ³μ μΌλ‘ κ°μ₯ λ§μ΄ μ¬μ©λλ jsμμ§μ΄λ©°, V8 λΏ μλλΌ λ€λ₯Έ μμ§λ€λ ν΄λΉ λ°©μμ μ¬μ©ν©λλ€.
2. μμ§μ λ΄λΆ νλ‘μΈμ€λ₯Ό μμ보며 thisλ jsμ μΈμ΄μ νΉμ±μ μ΄ν΄νλ κ²μ λμμ΄ λ μ μμ΅λλ€.
0. ???: jsλ μ»΄νμΌ νμμλ μΈμ΄μΈλ°μ?
κΈμ μμνκΈ°μ , μλ‘ μ κ°λ μ κ·Όκ°νμ¬ λ§μ νμλ©΄ jsλ μΈν°νλ¦¬ν° μΈμ΄λΌ μ»΄νμΌμ΄ νμ μμ΅λλ€..λ§
μλ ν₯μ λ±μ λͺ©μ μ μν΄ jsμμ§ λ΄μμ μΌλΆ μ»΄νμΌ κ³Όμ μ΄ μλ κ²½μ°κ° μμ΅λλ€. νΉν μ΅κ·Ό λ€μ μ¬μ©λλ Chrome v8μμ§μ΄ κ·Έ μμμ λλ€.
λ°λΌμ jsλ μ νμ μΌλ‘ μ»΄νμΌνλ μΈν°νλ¦¬ν° μΈμ΄μ λλ€.
Chrome V8μμ§μ΄ μΈν°νλ¦¬ν° μΈμ΄λ₯Ό μ€ννλλ° μ»΄νμΌμ μΆκ°νκ³ μ νλ μ΄μ μ, κ·Έλ‘ μΈν΄ μ»΄νμΌμ΄ μΆκ°λ κ³Όμ μ λν μμΈν λ΄μ©μ μλ ν¬μ€νΈλ₯Ό μ°Έκ³ νμκΈ° λ°λλλ€. (λ³Έ ν¬μ€νΈμ μΌλΆ λ΄μ©μ΄ κ²ΉμΉ©λλ€)
https://oowgnoj.dev/review/advanced-js-1
κ°λ΅νκ² μ 리νμλ©΄..
1) Googleμ΄ μ§λμλΉμ€λ₯Ό κ°λ°νλ μ€ js μμ§μ μΈν°νλ¦¬ν° μΈμ΄μ νΉμ±μΌλ‘ μΈν νκ³λ₯Ό λλ
2) μ»΄νμΌ κΈ°λ₯μ΄ μΆκ°λ V8μμ§μ μΆμνμ¬ μ±λ₯μ λμ
μ λκ° λκ² μ΅λλ€.
κ·Έλμ κΈμ μμνκΈ°μ μ€μ jsκ°λ°μμλ μ‘°κΈ κ±°λ¦¬κ° μλ μ»΄νμΌ κ³Όμ μ μλμ μ§μ§ μ‘°κΈ μ€λͺ ν κ²μ λλ€.
μ«λ€λ©΄.. λ°μ λ¨λ½λ§ λκΈ°μλ©΄ λ©λλ€ (μ μ΄λμκ²μ π)
λ΄μ© μ΄ν΄μλ μ§μ₯μ΄ μμ΅λλ€
js μ½λλ₯Ό μ€νμν€κΈ° μν΄ v8μμ§μ μ°λ¦¬κ° μ보μ΄λ κ³³μμ μ¬λ¬ λ¨κ³λ₯Ό κ±°μΉλ©° ν¨μ¨μ μΌλ‘ μ½λλ₯Ό μ€νμν€κΈ°μν΄ λ Έλ ₯ν©λλ€.
μ΄ λ¨κ³λ€μ μ½λκ° μ€νλκΈ° μ μ 미리 μ²λ¦¬ν΄λλ κ²μ΄ μλ μ€ννλ κ·Έ μ¦μ μ²λ¦¬λ©λλ€. κ·Έλμ jsκ° μ»΄νμΌ λλ λ°©μμ JIT ( = Just In Time) μ»΄νμΌλ°©μμ΄λΌ ν©λλ€.
ν¬κ² 3λ¨κ³, νΉμ 4λ¨κ³λ‘ ννμ΄ κ°λ₯νλ°, μ΄λ 보λ κ΄μ μ λ°λΌ λ€λ₯Ό μ μμ΅λλ€.
3λ¨κ³λ‘ νννμλ©΄ λ€μκ³Ό κ°μ΅λλ€:
1. λ μ± (Lexing): μμ±λ μ½λλ₯Ό μλ―Έλ₯Ό κ°μ§κ³ μλ μ΅μ λ¨μ (=ν ν°)μΌλ‘ λΆμλ(?) κ³Όμ μ λλ€.
2. νμ± (Parsing): ν ν°λ€μ λ¬Έλ² κ΅¬μ‘°λ€μ λ°μν νΈλ¦¬(=AST)λ‘ λ§λλ κ³Όμ μ λλ€.
3. μ½λ μμ±: νμ±κ³Όμ μμ λμ¨ ASTλ₯Ό κΈ°λ°μΌλ‘ μΈν°ν리ν°κ° jsλ₯Ό μ½μΌλ©° μ²λ¦¬ν©λλ€.
μ‘°κΈ λ μμΈν ννν 4λ¨κ³λ 3λ² λ¨κ³κ° νμ₯λ©λλ€:
1,2: μλ
3. μΈν°νλ¦¬ν° μ€ν: V8μμ§μ΄ κ°μ§κ³ μλ Interpreter Ignitionμκ² ASTλ₯Ό μ λ¬νμ¬ λ°μ΄νΈμ½λλ‘ λ³ννμ¬ μ½λλ₯Ό μ€μ λ‘ μ€νν©λλ€.
4. TurboFan μ€ν (μ νμ ): Ignitionμ΄ λ³νν λ°μ΄νΈμ½λλ€ μ€ μμ£Ό μ€νλλ μ½λλ₯Ό TurboFanμ΄ μ΅μ νλ μ½λλ‘ λ€μ μ»΄νμΌν©λλ€. λ°λλ‘ μμ£Ό μ€νμ΄ λμ§ μλλ€κ³ νλ¨λλ©΄ λ°μ΅μ ν (Deoptimizing)ν©λλ€.
λ μμΈν μ΄μΌκΈ°λ μλ ν¬μ€νΈλ₯Ό 보μλ©΄μ μ΄ν΄νμλ©΄ λ μ’μ κ² κ°μ΅λλ€.
μ΄ ν¬μ€νΈμμ V8μμ§μ΄ λμκ°λ μ리λ μ¬κΈ°κΉμ§λ§ μ€λͺ
ν μμ μ
λλ€ (머리μν..)
https://evan-moon.github.io/2019/06/28/v8-analysis/
λκΈ°μ λΆλ€μ μν΄ κ°λ΅ν μ€λͺ νμλ©΄..
js μ½λλ λ μ± -> νμ± -> μ½λ μμ± κ³Όμ μ κ±°μΉ©λλ€
κ° κ³Όμ μ μμΈν λ΄μ©μ΄ κΆκΈνμλ€λ©΄ μ λ¨λ½μ λ΄μ£ΌμΈμ.
κ°λ¨ν μ€λͺ μ μλμμ νλνλ μ€λͺ νλ©° μ½κ°μ© μ€λͺ ν μμ μ λλ€.
1. λ μ±
λ μ± (=Lexing)μ΄λ μμ±λ μ½λλ₯Ό μλ―Έλ₯Ό κ°μ§ μ΅μ λ¨μλ‘ μλΌλ΄λ κ²μ μλ―Έν©λλ€. νκΈ λ¬Έμ₯μ ννμλ‘ μλ₯Έλ€κ³ 보μλ©΄ λ©λλ€. νκΈμμλ μλ―Έλ₯Ό κ°μ§ μ΅μ λ¨μλ₯Ό ννμλΌκ³ νλλ°, μ¬κΈ°μμλ "ν ν°"μ΄λΌκ³ ν©λλ€.
var num = 10;
μ΄λΌλ μ½λλ
"var", "num", "=", "10", ";"λ‘ λλμ΄μ§λλ€.
function b() {
}
ν¨μ μ μΈλ¬Έμ μ΄λ¨κΉμ?
"function", "b", "()", "{}"λ‘ λλμ΄ μ§λ€κ³ ν©λλ€.
2. νμ±
νμ± (=Parsing)μ΄λ ν ν°μ ASTλ‘ λ°κΎΈλ κ³Όμ μ λ§ν©λλ€. μ¬κΈ°μμ ASTλ Abstract Syntax Tree, μΆμ ꡬ문 νΈλ¦¬μ μ½μμ λλ€.
μ΄λ° μμΌλ‘ νΈλ¦¬κ° μμ±λλ€κ³ νλ€μ. λ³΄λ€ μμΈν λ΄μ©μ μ κ° μ½μ΄λ΄€λ ν¬μ€νΈλ₯Ό μλμ 첨λΆνκ² μ΅λλ€. μ΄ ν¬μ€νΈμ λͺ©μ μ V8μ μμΈν μ΄ν΄κ° μλ μ€μ½νμ μ리μ λν μ΄ν΄λ₯Ό μν κΈ°λ°μ΄λκΉμ(μ΄ λ΄μ©μ λ€μ ν¬μ€νΈμ μμ΅λλ€!!)
https://gyujincho.github.io/2018-06-19/AST-for-JS-devlopers
3. μ½λ μμ±
μ΄ λΆλΆμ λν μ€λͺ μ μλ΅νκ² μ΅λλ€. μμΈν λ΄μ©μ μμ μ νμλ κΈμ΄λ μ€κ°μ€κ° 첨λΆν λ€λ₯Έ ν¬μ€νΈ, νΉμ μΆνμ μ λ‘λν κ²μλ¬Όμ νμΈν΄μ£ΌμΈμ!
'π¨ Dev_FE' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ CSS ] CSS λͺ¨λ°μΌ Transition κ°μ (0) | 2022.02.13 |
---|---|
[ JS ] λ¬Έμμ΄λ΄μ νΉμ λ¬Έμμ΄ λͺ¨λ λμΉνκΈ° (0) | 2022.01.25 |
[ vanilla js ] Web Worker API (κ°λ νΈ) (0) | 2021.07.20 |