-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
23_JavaScript-engine.html
50 lines (50 loc) 路 2.08 KB
/
23_JavaScript-engine.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<p>
Cuando llega un script al navegador el JS Engine inicia un proceso el cual
consta de:
</p>
<ul>
<li>
Recibir el c贸digo como un flujo de bytes UTF-16 y pasarlo a un decodificador
de flujo de bytes (el cual hace parte del motor).
<img
src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xs5OQmGX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/pv4y4w0doztvmp8ei0ki.gif"
alt=""
/>
</li>
<li>
El parser toma el c贸digo y lo descompone en tokens (los tokens son elementos
de js como: let, new, s铆mbolos de operaciones, functions, promises).
<img
src="https://res.cloudinary.com/practicaldev/image/fetch/s--ID8wDIAy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/bic727jhzu0i8uep8v0k.gif"
alt=""
/>
</li>
<li>
Gracias a el anterior parseo se genera una estructura de datos en forma de
谩rbol, o Abstract Syntax Tree (AST).
<img
src="https://res.cloudinary.com/practicaldev/image/fetch/s--6IHw1BUH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sgr7ih6t7zm2ek28rtg6.gif"
alt=""
/>
</li>
<li>
El int茅rprete recorre el AST y va generando el bytecode.
<img
src="https://res.cloudinary.com/practicaldev/image/fetch/s--HlXdsZRx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/i5f0vmcjnkhireehicyn.gif"
alt=""
/>
</li>
<li>
El optimizing compiler optimiza el c贸digo bytecode a machine code y se
reemplaza el c贸digo base.
<img
src="https://res.cloudinary.com/practicaldev/image/fetch/s--gsKbgaq7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ongt4qftovd82sp2vihk.gif"
alt=""
/>
</li>
<li>
Nota: El optimizing compiler encuentra los puntos donde el c贸digo se puede
optimizar, no lo hace con todo el c贸digo. Normalmente optimiza el c贸digo que
se repite varias veces, como por ejemplo un ciclo for muy largo.
</li>
</ul>