Most code running in a web browser runs much slower than native code (C/C++/ assembly), and it’s fine for many applications, but some others requiring higher performance like software video decoding would have to relies on native code, initially provided via browser plugins, but then Google introduced PNaCL (Portable Native Client) allowing to run native code on multiple targets (ARM, Intel, etc..) but in Chrome browser only, and now one of Chrome developers has explained that the community has moved to WebAssembly.
WebAssembly works just as well as PNaCl, and is already natively supported by Chrome and Firefox, with support added to preview versions of Microsoft Edge and Apple Safari browsers.Since it works just as well as PNaCL, and adoption of the later is low enough, Google decided to drop support for PNaCl in the Chrome browser in Q1 2018, except inside Chrome Apps and Extensions.
To get a feel for the performance and capabilities, you can find a few demos on WebAssembly website:
- A 3D Tank game based on Unity and WebGL
- An in-browser video editor applying various filter to a video or your webcam input in real-time.
If you’ve ever made a native web app relying on PNaCl, Google has provided a set of recommendation to help migration to WASM.