BlinkOn9 - WebAssembly

简介: 作者在 4 月 18~19 期间和同事一起在湾区参加了为其两天的 BlinkOn 9 会议。每次 BlinkOn 都是了解当前 Blink & Chrome 和 Web 技术演进现状和发展方向的一个不错机会,两天的会议下来大概听了 6 ~ 7 场分享,有些主题是之前已经有所了解,这次又更新了最新的进展信息;有些主题则是完全陌生,在这次 BlinkOn 上才第一次知悉。

作者在 4 月 18~19 期间和同事一起在湾区参加了为其两天的 BlinkOn 9 会议。每次 BlinkOn 都是了解当前 Blink & Chrome 和 Web 技术演进现状和发展方向的一个不错机会,两天的会议下来大概听了 6 ~ 7 场分享,有些主题是之前已经有所了解,这次又更新了最新的进展信息;有些主题则是完全陌生,在这次 BlinkOn 上才第一次知悉。作者接下来会撰写一系列文章,每篇文章针对一个特定的主题,尽可能把相关的信息回馈给读者。

WebAssembly Overview

WebAssembly 整合了 Chrome 之前一直在搞的 Native Client/Portable Native Client 和 Firefox 的 asm.js,为 Web 技术的演进开辟了新的方向和更多的可能性。WASM 得到了众多大佬的站台和各大浏览器引擎的一致支持,在 2017 年年底已经达成了第一个里程碑,Chrome,Firefox,Safari 和 Edge 都已经交付了所谓的 MVP 版本,标志着 WASM 对开发者来说已经处于基本可用的状态。

今年对 WASM 来说应该会是开始崭露头角的一年,一方面语言特性和开发工具链会进一步完善,达到真正可用的状态;另一方面基于 WASM 开发的一些应用/引擎/库也会逐步进入发布状态,让更多人开始真正体验到 WASM 的潜力所在。

如果读者对 WebAssembly 并不了解,希望可以快速有个完整的认识,推荐 YouTube 上的这个视频 - WebAssembly and the Future of the Web

WebAssembly for Developers

WebAssembly for Developers 是这次 BlinkOn 上干货比较多的一个分享,分享的内容主要包括两部分:

  1. 当前在开发中的,使用了 WASM 的实际应用;
  2. 接下来的新增特性支持;

基于 WASM 开发中的应用,引擎和库包括:

  1. AutoCAD 的 Web 版本;
  2. Google 地球的新版本;
  3. Unity 和 Unreal 游戏引擎的 Web 版本;
  4. 其它的还包括人脸跟踪,扫码识别,各种视频,图像编码/解码器,区块链应用等;

比较可惜的是还没有一个正式发布可用的 Show Case 应用。

新增的特性支持是作者比较关注的,特别是多线程支持,SIMD 和 Web API 的直接调用。

多线程支持所需的相关特性是 SharedArrayBuffer 和 Atomics,SAB 早前是因为会被“熔断”和“幽灵”这样的时间攻击漏洞所利用而在各大浏览器里面被“下架”了,Chrome 近期就会修复相关的漏洞并重新“上架”。对于使用 C/C++ 语言的 WASM 开发者来说,直接使用 pthread API 即可,编译器会自动生成相应的实现代码。

SIMD 对于高性能计算来说重要性无需赘述。这也是 WASM 能够跟 JavaScript 在计算性能上真正拉开差距的一个重要特性,Chrome 已经有一个原型实现,应该近期就会正式支持。

Web API 的直接调用对于希望使用 WASM 进行开发的 Web Game 来说非常重要,目前 WASM 调用 Web API 需要先经过 JavaScript 的 Wapper,这种转接的方式性能损耗太大,对于一个普通 Web Game 来说,每一帧上千甚至几千个 WebGL/Canvas API 调用都是很正常的,per API Overhead 就变得尤其重要了。好的消息是针对这个问题,Reference TypesHost Bindings 技术提供了一个在 WASM 直接操作 JavaScript + DOM 对象和调用其方法的解决方案,然后虚拟机的机器码生成可以直接内联相应的 Web API 调用代码,生成的最终代码相当于 WASM 直接调用浏览器 Web API 的 Native 实现代码。我们跟 v8 团队工程师后续的交流,根据他们的回复,最终 WASM 调用 Web API 的性能要更优于当前在 JavaScript 调用 Web API 的性能。当然坏消息就是,目前的进展是刚刚才开始,他们还无法制定具体的发布日期。

目录
相关文章
|
Web App开发 存储 JavaScript
使用AssemblyScript 构建 WebAssembly 应用
WebAssembly,也称为 Wasm,是为 Web 创建的二进制格式。它允许通过从常规 JavaScript 访问的相同 Web API 访问浏览器功能。
749 0
使用AssemblyScript 构建 WebAssembly 应用
|
7天前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
78 51
|
6月前
|
开发框架 JavaScript 前端开发
WebAssembly:下一代跨平台代码执行环境
WebAssembly(简称Wasm)是一种新型的低级字节码格式,可以在现代Web浏览器上运行,同时也可以在其他平台上运行。它是未来互联网应用程序的重要组成部分。本文将介绍WebAssembly的基础知识、其与JavaScript的关系、以及使用WebAssembly进行高效计算的示例。
|
开发框架 Rust JavaScript
WebAssembly
关于使用和推荐方面,由于缺乏关于 Grain 语言的详细信息,我无法为您提供确切的建议。如果您需要关于 JavaScript 和 WebAssembly 的建议,我可以为您提供一些建议:
139 3
|
Rust JavaScript 前端开发
WebAssembly 入门
本文讲解了 WebAssembly 的入门知识,包括理论以及一些实践过程
12784 8
|
JavaScript C# C++
如何使用单纯的`WebAssembly`
如何使用单纯的`WebAssembly`
111 0
如何使用单纯的`WebAssembly`
|
编解码 Rust 前端开发
WebAssembly在前端开发中的应用(1)
WebAssembly在前端开发中的应用(1)
193 0
|
前端开发 JavaScript 编译器
WebAssembly在前端开发中的应用(2)
WebAssembly在前端开发中的应用(2)
|
Web App开发 Rust JavaScript
认识 WebAssembly 与 Rust 实践
作者基于 WebAssembly 的兴趣写下本文,提供了一种未来在业务中遇到性能问题时的优化手段和思路。
530 0
认识 WebAssembly 与 Rust 实践