๐Ÿš€ JS Engine - V8

2019. 04. 27.
SAT10AM - ์ด์žฅํฌ

๐ŸŒด๐Ÿš– ๋ชฉ์ฐจ

  • JavaScript์˜ ์—”์ง„์ด๋ž€?
  • Google Open Source - V8
  • V8 ์—”์ง„์˜ ๋™์ž‘ ๊ณผ์ •
  • V8 ์—”์ง„์˜ ์ตœ์ ํ™”

JavaScript์˜ ์—”์ง„์ด๋ž€?

๋ง ๊ธ€๋Œ€๋กœ JS์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š”
์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ์ฆ‰์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ตœ์ ํ™”๋Š” ๋˜์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž ์‹œ์Šคํ…œ์ด ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ปดํ“จํ„ฐ ์ฝ”๋“œ ์ƒ์„ฑ์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ตœ์ ํ™”๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.ย 

ํ˜„๋Œ€ ์—”์ง„์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด

์ปดํŒŒ์ผ๋Ÿฌ + ์ธํ„ฐํ”„๋ฆฌํ„ฐ

ํ˜„๋Œ€ ์—”์ง„์˜ ๋™์ž‘ ๊ณผ์ •ย 

Inline Caching (IC)

์ธ๋ผ์ธ ์บ์‹ฑ์€ ์กฐํšŒ ์ž‘์—…์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.ย 

Duck or Multiple Types

์ฆ‰ ์ธ๋ผ์ธ ์บ์‹ฑ์€ ์†์„ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์œ„ํ•œ ๊ฐ’ ๋น„์‹ผ ์กฐํšŒ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.ย 

megamorphic IC๋ฅผ
ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”?

์ตœ์‹  Javascript์˜ ์—”์ง„์ด๋ž€?

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์žฅ์ ์ธ ๋น ๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๊ณผ ๋น ๋ฅธ ์ฝ”๋“œ ์‹คํ–‰์„ ๊ฒฐํ•ฉํ•œ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค.
    ย 
  • ์ธ๋ผ์ธ ์บ์‹ฑ์ด๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    ์ธ๋ผ์ธ ์บ์‹ฑ์€ ๋‹จ์ผ ์˜ค๋ธŒ์ ํŠธ ๋ชจ์–‘์„ ๊ฐ€์งˆ ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
    ย 
  • JavaScript ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. TypeScript์™€ ๊ฐ™์€ static typed transpiler๋Š” monomorphic IC์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

๋„-์•

Google js engine - v8

v8 ์—”์ง„์˜ ๋™์ž‘ ๊ณผ์ •

JS Engine

By yesdoing

JS Engine

  • 217