点赞
评论
收藏
分享
举报
深入了解 WebAssembly —— 一种新的 Web 可执行文件格式
发表于2023-04-19 16:19

浏览 3.8k

文章标签

原文作者:Dave McAllister of F5
原文链接:深入了解 WebAssembly —— 一种新的 Web 可执行文件格式
转载来源:NGINX 官方网站

NGINX唯一中文官方社区 ,尽在 nginx.org.cn

计算技术的发展日新月异。从大型机到云 IaaS,从虚拟机到 Linux,我们不断地扩展和重塑技术。通常,这些技术变革是由于“惯常做法”不再适用于新的模式,或者实际上从一开始就不太理想。

我们从一些新兴技术中不难看出这一点。不断变化的需求会催生新的解决方案,例如虚拟机 (VM)、容器、KubernetesOpenTelemetry。只要该解决方案行之有效,人们便会纷纷采用,就像 Kubernetes 和 OpenTelemetry 一样。

最近,我采访了一些行业专家,他们预测了的三项未来可能有重大影响的技术。其中一项技术尤为值得我们深入了解:WebAssembly(通常缩写为 Wasm)。

Wasm 引起了广泛关注,因为它将浏览器语言的支持范围扩展到了 JavaScript 之外。它不是 JavaScript 的替代方案,而是万维网联盟 (W3C) 认可的第四种也是最新的官方 Web 标准开发语言(其他三种是 HTML、CSS 和 JavaScript)。

什么是 WebAssembly?

早在 2015 年,Mozilla 就开始着手制定一套新标准,将“一种可移植的、紧凑的、加载时间高效的格式和执行模型”作为 web 浏览器的编译目标。

WebAssembly 的设计初衷是允许 JavaScript 以外的其他语言在浏览器中运行。Wasm 很快就得到了浏览器厂商的青睐,所有主流浏览器都可以支持它

大家可能还记得使用交叉编译器的时代,当时代码是针对外部环境的,通常是在控制硬件中。这些目标千差万别,这意味着交叉编译必须在生成系统和目标系统之间严格保持一致。

Wasm 的工作原理大同小异,可在广泛的平台上为定义的运行时提供二进制可执行文件。由于运行时是一种低级虚拟机(类似于 JVM),因此可嵌入到许多主机应用中。

Wasm 既是一种用于执行程序的可移植二进制代码,也是一组用于程序与其环境之间交互的接口。它没有做出任何 Web 特定假设,因此可以被广泛使用。

事实上,人们对 Wasm 的兴趣在很大程度上源于其在服务器端用例中的潜力。CosmonicFermyonSuborbital 等公司表明,Wasm 将影响我们从浏览器到后端应用的未来发展。

Wasm 支持多种语言,这是它备受青睐的原因之一。Wasm 几乎涵盖了所有热门语言,包括 C、C++、Go、Ruby 和 Rust 等。对其他语言的部分实现也已经支持或正在开发中。

但需要注意的是,Wasm 对特定语言的支持可能仅限于某些特定的上下文:浏览器、浏览器之外,或者甚至直接在一个系统上。因此,您必须在您想要使用 Wasm 的上下文中验证它是否支持某种语言。

为何要关注 WebAssembly?

WebAssembly 专注于所有浏览器都需要的几个关键特性。我们之前提及了 Wasm 的多语言特性,该特性允许浏览器扩展到多种语言。接下来我们来看看它的其他特性。

  • 速度/性能 — 没人愿意等待网页加载,更不用说等待 web 应用加载和启动了。Wasm 的编译模型有助于加快加载速度。事实上,其性能可接近原生应用的性能。
  • 大小 — 对于 web 应用而言,下载对象的大小是关键因素。二进制文件越小,启动速度越快。
  • 跨平台 — Web 浏览器是网站和应用的通用访问点,所以我们希望“一次编写,随处运行”(在所有浏览器上)成为现实,而不仅仅是一个承诺。Wasm 已经做到了这一点,并将继续改进。
  • 多语言 — 在现代的自适应应用和微服务架构环境中,没有一种语言能够满足所有需求。Wasm 使得多语言可以从应用开发延伸到浏览器,从此,“我不使用那种语言”这一主要的“反面模式”将不会再成为一种阻碍。特别是对于服务器端的使用,我们需要有除 JavaScript 之外的更多选择,而 Wasm 可支持我们做到这一点。
  • 安全性 — 如果您必须在浏览器中运行不受信任的代码,则必须将其隔离。Wasm 通过内存安全的沙盒执行环境来实现隔离。目前的实现还不够完美,但 Wasm 的贡献者非常关注这个方面,因此预计很快会有所改进。

这些特性不仅让 Wasm 具有很高的性能和效率,而且还非常好用。请记住,现在 Wasm 可能并不比 JavaScript 快多少,也没有 JavaScript 多年积累的优化成果。但是,速度并不是 Wasm 获得青睐的唯一因素——大小和能够支持您所使用的语言也很重要。

如何快速上手?

对于 WebAssembly,我们有很多很棒的资源和案例。显然,从初创公司到大公司,很多公司都在使用它:

  • Adobe 演示了如何使用 Wasm 在浏览器中运行 Photoshop。
  • Figma 使用 Wasm 将加载时间缩短了 3 倍。
  • VMware 的 Wasm Labs 演示了在浏览器中运行的 WordPress、PHP 运行时和数据库。

但您不必一下子就切换到 Wasm。下面都是些很好的学习资源:

  • WebAssembly.org 是 Wasm 所有相关内容的权威来源,包括规范和面向开发人员的结构化入门指南。
  • Renee Shah 在她的博客上调查了 18 家初创公司的技术人员如何以及为何使用 Wasm。https://reneeshah.medium.com/how-webassembly-gets-used-the-18-most-exciting-startups-building-with-wasm-939474e951db
  • 以下演示应用均使用 Wasm 运行:
  1. 来自 Wasm Labs的 WordPress
  2. Bartholomew(一个微型 CMS)和 Finicky Whiskers(一款游戏),两款应用都来自 Fermyon
  3. 来自 QT Group 的系列演示

总结

WebAssembly 仍在开发中,与其他新技术一样,有些方面仍需完善。即便如此,它背后的理念仍引人注目。

我预计它将成为一项颠覆性技术,成为支持未来感知可控、随需而变的应用发展的主要力量,无论是在浏览器中还是云端。毫无疑问,WebAssembly 是您现在需要深入了解的技术之一。


NGINX唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源:

开源社区官网:https://www.nginx.org.cn/

微信公众号:https://mp.weixin.qq.com/s/XVE5yvDbmJtpV2alsIFwJg

已修改于2023-04-19 16:19
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
331
文章
21
问答
201
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 23.4k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 16.8k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 19.3k