| 1 | = The State of JSC = |
| 2 | |
| 3 | - Moved from LLVM to B3/Air |
| 4 | - Transition is complete |
| 5 | - FTL Jit in 64-bit platforms |
| 6 | - Big Jetstream improvements |
| 7 | - Big Kraken improvements |
| 8 | |
| 9 | - Moved from Tracing to Sampling profiler |
| 10 | - Performance is an order of magnitude better in Web Inspector |
| 11 | - 10-20x faster with the sampling profiler |
| 12 | |
| 13 | - ES6 Feature Complete |
| 14 | - Block Scoping |
| 15 | - Generator Functions |
| 16 | |
| 17 | - Current work |
| 18 | - ES6 Sample Bench |
| 19 | - Fast Generators |
| 20 | - Fast Map/Set |
| 21 | - gotten 20% faster |
| 22 | - Runs 2 different tests |
| 23 | - Takes geometric mean of tests |
| 24 | - Steady state |
| 25 | - Concurrent Garbage Collection |
| 26 | - Gonna mean pauses in JSC |
| 27 | - Pauses won’t be nearly as long |
| 28 | - Execute JS during GC |
| 29 | - There will be points where you pause the world but it won’t be in high milliseconds |
| 30 | - Working on WebAssembly |
| 31 | - It’s being implemented |
| 32 | - DOM JIT |
| 33 | - Creating an abstraction for the JSC for operations on the DOM |
| 34 | - Be aware of getter accessors of being compiled |
| 35 | - Integrating ES6 Modules in HTML |
| 36 | - <script type=“module”> |
| 37 | - Almost done ES2017 |
| 38 | - Support everything buy async/await |
| 39 | - Patches on async/await |
| 40 | |
| 41 | - Demo of command line: |
| 42 | - `./Tools/Scripts/run-jsc —release —sample ~/test.js` |
| 43 | - Shows sampling rate |
| 44 | - and the hottest byte code samples |
| 45 | - The hash identifies the code blocks and just |
| 46 | - These tools would be nice for WebContent process |
| 47 | - Too difficult to use with the sample profiles |
| 48 | - Would be cool to add byte code information in inspector |
| 49 | - At a high level a Heat Map would be nice (being worked on) |
| 50 | - If it is in inspector, it can impact performance and throw off the profile |
| 51 | - `JSC_dumpDFGDisassembly=1 ./Tools/Scripts/run-jsc —release —sample ~/test.js` |
| 52 | |
| 53 | - How to async/await |
| 54 | - async func with await is a shorthand for promises |
| 55 | - await automatically wraps the given function in a Promise and returns the promise |
| 56 | |
| 57 | - WebAssembly |
| 58 | - Work is underway |
| 59 | - There is a trapping semantic in WebAssembly |
| 60 | - Cant export a function that takes 64-bit integer |
| 61 | - Internally in WebAssembly you can handle 64-bit integers |
| 62 | - You have to check that the memory is in bounds, if not then you have to unwind the webassembly |
| 63 | - Does the exception flatten the webassembly? |
| 64 | - The plan is to have each WebAssembly frame visible |
| 65 | - You can have import and export in WebAssembly to call from WebAssembly to JS |
| 66 | - Developers would likely have WebAssembly that calls to a JS helper to modify DOM since you can’t modify the DOM from WebAssembly |
| 67 | - There is a lot of debate still happening |
| 68 | - You can use the JS GC for whatever language your using |
| 69 | - How fast is WebAssembly? |
| 70 | - Significantly faster for common cases of compiling C code |
| 71 | - WASM is quite slow compared to native codes |
| 72 | - WebAssembly has more info about how things work that allow for more optimizations |
| 73 | - Close to native performance |
| 74 | - How do I compile to WebAssembly? |
| 75 | - Compile through clang, that pass it to LLVM IR then pass it back to WebAssembly |
| 76 | - It will likely get easier as tools are created |