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 访问浏览器功能。
670 0
使用AssemblyScript 构建 WebAssembly 应用
|
2月前
|
前端开发 JavaScript C++
深入探索WebAssembly在前端性能优化中的应用
随着Web应用的功能越来越复杂,传统的JavaScript解释执行模式已经逐渐成为性能瓶颈。本文将介绍WebAssembly(以下简称Wasm)的基本概念、优势以及如何在现代Web开发中利用Wasm提升前端性能。我们将通过实际案例分析Wasm在处理高性能计算任务时相比JavaScript的优势,并探讨如何将Wasm集成到现有的前端项目中,以实现无缝的性能优化。本文旨在为前端开发者提供一个全面的Wasm应用指南,帮助他们充分利用这一新技术,提升Web应用的响应速度和用户体验。
36 0
|
6月前
|
开发框架 Rust JavaScript
WebAssembly
关于使用和推荐方面,由于缺乏关于 Grain 语言的详细信息,我无法为您提供确切的建议。如果您需要关于 JavaScript 和 WebAssembly 的建议,我可以为您提供一些建议:
97 3
|
8月前
|
Rust 前端开发 JavaScript
深入理解WebAssembly:性能优化和跨平台应用
通过本文,我们深入了解了 WebAssembly 技术,以及如何利用它进行性能优化和实现跨平台应用。WebAssembly 不仅可以提高现有Web应用的性能,还可以为其他领域的开发带来更多可能性。感谢您阅读本文,如果您有任何问题或想法,请在评论区与我分享!让我们共同探索 WebAssembly 的无限潜力。
406 1
深入理解WebAssembly:性能优化和跨平台应用
|
8月前
|
编解码 Rust 前端开发
WebAssembly在前端开发中的应用(1)
WebAssembly在前端开发中的应用(1)
148 0
|
8月前
|
前端开发 JavaScript 编译器
WebAssembly在前端开发中的应用(2)
WebAssembly在前端开发中的应用(2)
|
9月前
|
JavaScript C# C++
如何使用单纯的`WebAssembly`
如何使用单纯的`WebAssembly`
70 0
如何使用单纯的`WebAssembly`
|
10月前
|
Rust JavaScript 前端开发
WebAssembly 入门
本文讲解了 WebAssembly 的入门知识,包括理论以及一些实践过程
12528 8
|
Web App开发 Rust JavaScript
认识 WebAssembly 与 Rust 实践
作者基于 WebAssembly 的兴趣写下本文,提供了一种未来在业务中遇到性能问题时的优化手段和思路。
404 0
认识 WebAssembly 与 Rust 实践