Skip to content

Commit 8e0d9cf

Browse files
Create 17-JSEngine-ChromeV8.md
1 parent cc4a35c commit 8e0d9cf

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

Notes/17-JSEngine-ChromeV8.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Episode 17 : JS Engine and Google v8 architecture
2+
3+
#### JS runs literally everywhere from smart watch to robots to browsers because of Javascript Runtime Environment (JRE)
4+
5+
- JRE consists of a JS Engine (❤️ of JRE), set of APIs to connect with outside environment, event loop, Callback queue, Microtask queue etc.
6+
- JRE is a container that can run JS code.
7+
8+
- ECMAScript is a governing body of JS. It has set of rules followed by all JS engines like Chakra(Edge), Spidermonkey(Firefox), v8(Chrome)
9+
- JS Engine is **not a machine**. Its software written in low level languages (eg. C++) that takes in hi-level code in JS and spits out low level machine
10+
code
11+
12+
In all languages, code is compiled either with **interpreter** or with **compiler**. JS used to have only interpreter in old times, but now has **both**
13+
to compile JS code.
14+
15+
Interpreter : Takes code and executes line by line. Has no idea what will happen in next line. Very fast.
16+
Compiler : Code is compiled and an optimized version of same code is formed, and then executed. More efficient
17+
18+
- Code inside JSE passes through 3 steps : **Parsing, Compilation and Execution**
19+
20+
1. **Parsing** - Code is broken down into tokens. In "let a = 7" -> let, a, =, 7 are all tokens. Also we have a **syntax parser** that takes code and converts it
21+
into an **AST (Abstract Syntax Tree)** which is a JSON with all key values like type, start, end, body etc (looks like package.json but for a line of code in JS. Kinda
22+
unimportant)(Check out astexplorer.net -> converts line of code into AST)
23+
24+
2. **Compilation** - JS has something called **Just-in-time(JIT) Compilation - uses both interpreter & compiler**. Also compilation and execution both go hand in hand.
25+
The AST from previous step goes to interpreter which converts hi-level code to byte code and moves to execeution. While interpreting, compiler also works hand in hand
26+
to compile and form optimized code during runtime.
27+
28+
3. **Execution** - Needs 2 components ie. Memory heap(place where all memory is stored) and Call Stack(same call stack from prev episodes). There is also a *garbage collector.*
29+
It uses an algo called **Mark and Sweep**.
30+
31+
Companies use different JS engines and each try to make theirs the best.
32+
33+
- v8 of Google has Interpreter called *Ignition*, a compiler called *Turbo Fan* and garbage collector called *Orinoco*

0 commit comments

Comments
 (0)