Wasm 为 Web 开发带来无限可能

发表于 3年以前  | 总阅读数:436 次

大家好, 不知道有没有小伙伴关注今年的 Google 开发者大会,今年的大会在 11.16 号开始。

Google 开发者大会 (Google Developer Summit) 是 Google 面向开发者和科技爱好者展示最新产品和平台的年度盛会。2021 年,Google 开发者大会以 “Develop as One” 为主题,携手开发者与合作伙伴共创机遇,共谋发展!

今年在 Web 方面,有 DevtoolsPWA、核心网页指标、CMS、隐私沙盒等等:

其中隐私沙盒的最新进展我在前几天的文章里已经介绍过,没看过的的小伙伴可以看这里:

[三方 Cookie 替代品 — 隐私沙盒的最新进展]

今天,我们来看看另一个我比较感兴趣的议题:WebAssembly

本次大会上的分享人是来自 GoogleWebAssembly 开发技术推广工程师 Ingvar Stepanyan

什么是 WebAssembly

WebAssembly 是一种二进制指令格式,简称为 Wsam,它可以运行在适用于堆栈的虚拟机上。

WebAssembly 存在的意义就是成为编程语言的可移植编译目标,让在 Web 上部署客户端和服务端应用成为可能。

WebAssembly 可以为我们带来什么

可移植性

如果你的网站现在想用一个能力,但是这个能力还没有被任何的 JavaScript 库实现,但是在其他编程领域里已经有了解决方案。

这时,你就可以借助 WebAssembly 将所需要的库编译为可以在 Web 上运行的二进制格式,在某些情况下甚至你还可以编译整个应用。一旦编译到 WebAssembly ,代码就可以在任何装有网络浏览器的设备上运行了,例如 PC、手机、平板电脑等等。

安全性

WebAssembly 需要在沙盒中运行,在沙盒中,除了初始化时程序主动提供给它的内容,它无法访问其他主机的内存和函数。

这意味着, WebAssembly ,在你没有给它下发命令的情况下,永远不会损坏你的主机进程内存,也无法随意访问文件系统或与其他设备通信。这就让它与运行在虚拟机和容器中的应用有相同的优势

高效

JavaScript 等人类可读的语言相比, WebAssembly 的字节码可以用更少的字节表示相同的指令,并且在 WebAssembly 模块依然处于下载期间就可以被编译。

因为编译器已经事先完成了优化工作,在 WebAssembly 中可以更轻松的获取到可预测的性能

WebAssembly 的开源应用

Squoosh

Squoosh 是一个超强的图像压缩Web应用程序,可让你深入研究各种图像压缩器提供的高级选项,例如比较视觉差异和文件大小以及下载优化后的图片版本。

https://squoosh.app/

它借助 WebAssembly 纳入了非常多的图片编解码器,这些编解码器可能来源于 C、C++、Rust 等等,在浏览器的标签页旧可以直接执行它们,不需要服务端做任何额外的处理。这让 Squoosh 可以处理很多旧的图片格式(例如 JPEG、PNG),也可以处理很多新的图片格式(例如 AVIF、JPEG-XL)。

FFMpeg

FFmpeg 是视频处理最常用的开源软件,它功能强大,用途广泛,大量用于视频网站和商业软件(比如 YoutubeiTunes),也是许多音频和视频格式的标准编码/解码实现。

借助 WebAssembly 的能力,它现在有了一个 Web 版本:FFMPEG.WASM,让你可以在浏览器里处理视频,你可以到下面这个网址上去体验一下:

https://ffmpegwasm.netlify.app/

MediaPipe

MediaPipe 是一款由 Google 开发并开源的数据流处理机器学习应用开发框架。它是一个基于图的数据处理管线,用于构建使用了多种形式的数据源,如视频、音频、传感器数据以及任何时间序列数据。

https://google.github.io/mediapipe/

它支持多个平台,融入了 WebAssemblyWebGL 的强大能力,可以通过 JavaScriptWeb 上提供机器学习模型。

WebAssembly 用法

如果你现在有一个想要移植到 WebAssembly 的库,该怎么用呢?

实际上, WebAssembly 的官网 webassembly.org 是一个很好的开始,上面对于各种语言的教程都是比较全的,在这些教程里你可以学到怎么去用相应的工具链,怎么向 WebAssembly 构建代码,以及如何利用到 Web 上,下面我们看几个最常用的工具链。

Emscripten

Emscripten 是一个开源的编译器,可以将 C/C++ 的代码编译成高度优化的 JavaScript 并且高效运行在现代浏览器上面,它推出的时间甚至比 WebAssembly 还要早。

现在,它可以将相同的 C/C++ 代码编译到 WebAssembly ,并提供各种各样的工具和绑定关系帮助你将生成的代码继承到 Web 中。

例如,Emscripten 提供 SDL 实现,可以用于在画布上绘制内容以及播放 Web 中的音频,来转换对 WebGL 的调用。

SDL(简单直接媒体层)是一个跨平台的开源开发库,旨在提供对输入和图形硬件的低级访问,用 C 语言编写,视频播放软件、模拟器和许多流行游戏都使用它。

Embind

不同语言都拥有不同的类型和内存表示法,JavaScript 和 C++ 也不例外,当你编译成 WebAssembly 也是一样的情况,所以仅仅通过编译是无法解决这个问题的。

想要使用这些库中的结果,还需要一些中间层来转换双向传递的值。

Emscripten 中实现这点最简单的方法,是使用一个叫 Embind 的功能,下面是一个示例:

// quick_example.cpp
#include <emscripten/bind.h>

using namespace emscripten;

float lerp(float a, float b, float t) {
    return (1 - t) * a + t * b;
}

EMSCRIPTEN_BINDINGS(my_module) {
    function("lerp", &lerp);
}

通过 EMSCRIPTEN_BINDINGS 块,就可以以 JavaScript 函数形式声明对外开放的 API,以及转换作为实参传递到 C++ 函数的值或者从 C++ 返回的值。这样一来,你就可以将现有任何的 C++ 库封装到一个对 JavaScript 友好的 API 中。

最后你可以同时编译 API 封装容器和之前构建的依赖项,并传递一个 --bind 参数来启用 Embind

emcc --bind -o quick_example.js quick_example.cpp

如果将其编译为 `扩展项,它会生成一个ES6兼容模块,然后你就可以从JavaScript` 代码导入它,异步初始化这个模块。

import initModule from './mylib.mjs';

const Module = await initModule();
Module.lerp(1,2,3);

然后你就可以使用之前从 EMSCRIPTEN_BINDINGS 块声明的所有 API。

wasm-bindgen

如果你熟悉 Rust ,就知道它在 WebAssembly 领域的贡献是非常大的。

Rust 提供了 wasm-bindgen 这个工具来支持为任何 Web API 生成绑定关系,以及将你自己的 Rust 函数导出为 JavaScript

感兴趣你可以看一下下面这个在线教程:https://rustwasm.github.io/

教程中有将 Rust 函数导出为 JavaScript 的详细指引,以及一些示例,和 Embind 一样,它也负责在语言之间的双向类型转换,参考下面这段代码:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern "C" {
    fn alert(s: &str);
}

#[wasm_bindgen]
pub fn greet(name: &str) {
    alert(&format!("Hello, {}!", name));
}

当你在一个 extern 块上应用 wasm_bindgen 属性时,就可以导入指定的 API,当你在自己的类型和函数上应用 wasm_bindgen 属性时,系统会导出相应的类型和函数。

在每种情况下,工具链都负责在后台为库生成类型转换, 以及 JavaScript 封装容器,甚至是 TypeScript 定义,声明 API 后,就可以编译库生成一个 ES6 模块。

const rust = import('./pkg');

rust
  .then(m => m.greet('World!'))
  .catch(console.error);

Emscripten 的示例类似,也需要异步将其初始化一次,然后就可以作为常规的 JavaScript 模块进行调用。

将 JS/TS 编译成 WebAssembly

那么,JavaScript、TypeScript 能不能编译成 WebAssembly 呢?

答案是否定的,因为 JavaScript 是高度动态的语言,而 WebAssembly 属于静态类型语言,不过我们可以借助 AssemblyScript 来帮助我们模拟实现这一点。

AssemblyScript 是一个 TypeScriptWebAssembly 的编译器,你可以到 https://www.assemblyscript.org/ 去了解它的详细用法。

未来

WebAssembly 现在已经处于稳定阶段了,几年前就被所有主流浏览器所支持,但是它仍在不断发展,探索新的能力。

在这些探索中,有一些改进了与 JavaScriptWeb 的集成,有一些缩减了代码体积、,还有一些进一步提升了性能,想了解更多,可以到下面的网址进行查看:

https://webassembly.org/roadmap/

现代浏览器的功能早已不局限在简单的页面呈现,这就是为什么 WebAssembly 会诞生的重要原因之一。为了将沉重的任务性能提升到一个新的水平,在 JavaScript 和机器代码之间搭建了一座桥梁,由此才有了 WebAssembly

让我们期待 WebAssembly 可以在 Web 上带给我们更多的可能性吧~

本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/RqgT9ASzYVLbK7r1WBlxaw

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:1年以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:1年以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:1年以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:1年以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:1年以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:1年以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:1年以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:1年以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:1年以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:1年以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:1年以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:1年以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:1年以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:1年以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:1年以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:1年以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:1年以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:1年以前  |  398次阅读  |  详细内容 »
 相关文章
Android插件化方案 5年以前  |  237276次阅读
vscode超好用的代码书签插件Bookmarks 2年以前  |  8114次阅读
 目录