Yesterday, Joshua Litt from the Google Chromium team announced to add support for top-level await in V8. V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linux systems that use x64, IA-32, ARM, or MIPS processors. V8 can run standalone, or can be embedded into any C++ application.
The official documentation page on Google Chromium reads, “Adds support for parsing top level await to V8, as well as many tests.This is the final cl in the series to add support for top level await to v8.”
As per the latest ECMAScript proposal on top-level await allows the await keyword to be used at the top level of the module goal. Top-level await enables modules to act as big async functions: With top-level await, ECMAScript Modules (ESM) can await resources, causing other modules who import them to wait before they start evaluating their body.
Earlier developers used IIFE for top-level awaits, a JavaScript function that runs as soon as it is defined. But there are certain limitations in using IIFE, that is with await only available within async functions, a module can include await in the code that executes at startup by factoring that code into an async function. And this pattern will be immediately invoked with IIFE and it is appropriate for situations where loading a module is intended to schedule work that will happen some time later.
While Top-level await function lets developers rely on the module system itself to handle all of these, and make sure that things are well-coordinated.
Community is really happy to know that top-level support has been added to V8. On Hacker News, one of the users commented, “This is huge! Finally no more need to use IIFE's for top level awaits”.
Another user commented, “Top level await does more than remove a main function. If you import modules that use top level await, they will be resolved before the imports finish.
To me this is most important in node where it's not uncommon to do async operations during initialization. Currently you either have to export a promise or an async function.”
To know more about this read the official Google Chromium documentation page.
New memory usage optimizations implemented in V8 Lite can also benefit V8
LLVM WebAssembly backend will soon become Emscripten’s default backend, V8 announces
V8 7.5 Beta is now out with WebAssembly implicit caching, bulk memory operations, and more