In this talk we will look at some of the optimizations that JavaScriptCore uses to speed up JavaScript execution, and perhaps counterintuitively, how the same optimizations are also being applied to speeding up WebAssembly.
38. Lexer Parser
Bytecode
Generator
Runtime
turn x + y }”
( x , y) { return x +y }
]
Identifier Identifier
Interpreter
[ 0] enter
[ 1] add loc0, arg1, arg2
[ 7] ret loc0
Bytecode
JIT
Optimizing
JIT
Addition
39. function add(x, y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
40. function add(x, y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
41. function add(x, y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
add
Interpreter
42. function add(x, y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
add
i = 100
Interpreter
43. function add(x, y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
add add
i = 100
Interpreter JIT
44. function add(x, y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
add add
i = 100 i = 1000
Interpreter JIT
45. function add(int x, int y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
add add
i = 100 i = 1000
Interpreter JIT
46. function add(int x, int y) { return x + y }
for (var i = 0; i < 1000000; i++)
add(i, 7);
root
add add add
i = 100 i = 1000
Interpreter JIT Optimizing JIT