Can code transmitted as an AST be source-mapped, so that developer tools can work properly?
On Fri, Aug 18, 2017 at 4:39 AM, David Teller <dtel...@mozilla.com> wrote: > Hey, all cool kids have exciting Engineering Newsletters these days, so > it's high time the JavaScript Binary AST got one! > > > # General idea > > JavaScript Binary AST is a joint project between Mozilla and Facebook to > rethink how JavaScript source code is stored/transmitted/parsed. We > expect that this project will help visibly speed up the loading of large > codebases of JS applications, including web applications, and will have > a large impact on the JS development community, including both web > developers, Node developers, add-on developers and ourselves. > > > # Context > > The size of JavaScript-based applications – starting with webpages – > keep increasing, while the parsing speed of JavaScript VMs has basically > peaked. The result is that the startup of many web/js applications is > now limited by JavaScript parsing speed. While there are measures that > JS developers can take to improve the loading speed of their code, many > applications have reached a situation in which such an effort becomes > unmanageable. > > The JavaScript Binary AST is a novel format for storing JavaScript code. > The global objective is to decrease the time spent between > first-byte-received and code-execution-starts. To achieve this, we focus > on a new file format, which we hope will aid our goal by: > > - making parsing easier/faster > - supporting parallel parsing > - supporting lazy parsing > - supporting on-the-fly bytecode generation > - decreasing file size. > > For more context on the JavaScript Binary AST and alternative > approaches, see the companion high-level blog post [1]. > > > # Progress > > ## Benchmarking Prototype > > The first phase of the project was spent developing an early prototype > format and parser to validate our hypothesis that: > > - we can make parsing much faster > - we can make lazy parsing much faster > - we can reduce the size of files. > > The prototype built for benchmarking was, by definition, incomplete, but > sufficient to represent ES5-level source code. All our benchmarking was > performed on snapshots of Facebook’s chat and of the JS source code our > own DevTools. > > While numbers are bound to change as we progress from a proof-of-concept > prototype towards a robust and future-proof implementation, the results > we obtained from the prototype are very encouraging. > > - parsing time 0.3 (i.e. parsing time is less than a third of original > time) > - lazy parsing time *0.1 > - gzipped file size vs gzipped human-readable source code *0.3 > - gzipped file size vs gzipped minified source code *0.95. > > Please keep in mind that future versions may have very different > results. However, these values confirm that the approach can > considerably improve performance. > > More details in bug 1349917. > > > ## Reference Prototype > > The second phase of the project consisted of building a second prototype > format designed to: > > - support future evolutions of JavaScript > - support annotations designed to allow safe lazy/concurrent parsing > - serve as a reference implementation for third-party developers > > This reference prototype has been implemented (minus compression) and is > currently being tested. It is entirely independent from SpiderMonkey and > uses Rust (for all the heavy data structure manipulation) and Node (to > benefit from existing parsing/pretty-printing tool Babylon). It is > likely that, as data structures stabilize, the reference prototype will > migrate to a full JS implementation, so as to make it easier for > third-party contributors to join in. > > More details on the tracker [2]. > > > ## Standard tracks > > As any proposed addition to the JavaScript language, the JavaScript > Binary AST needs to go through standards body. > > The project has successfully been accepted as an ECMA TC39 Stage 1 > Proposal. Once we have a working Firefox implementation and compelling > results, we will proceed towards Stage 2. > > More details on the tracker [3]. > > > > # Next few steps > > There is still lots of work before we can land this on the web. > > > ## SpiderMonkey implementation > > We are currently working on a SpiderMonkey implementation of the > Reference Prototype, initially without lazy or concurrent parsing. We > need to finish it to be able to properly test that JavaScript decoding > works. > > ## Compression > > The benchmarking prototype only implemented naive compression, while the > reference prototype – which carries more data – doesn’t implement any > form of compression yet. We need to reintroduce compression to be able > to measure the impact on file size. > > > > # How can I help? > > If you wish to help with the project, please get in touch with either > Naveed Ihsanullah (IRC: naveed, mail: nihsanullah) or myself (IRC: > Yoric, mail: dteller). > > > [1] https://yoric.github.io/post/binary-ast-newsletter-1/ > [2] https://github.com/Yoric/binjs-ref/ > [3] https://github.com/syg/ecmascript-binary-ast/ > _______________________________________________ > dev-platform mailing list > dev-platform@lists.mozilla.org > https://lists.mozilla.org/listinfo/dev-platform > _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform