博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈论源码_为什么每个人都在谈论WebAssembly
阅读量:2522 次
发布时间:2019-05-11

本文共 2527 字,大约阅读时间需要 8 分钟。

谈论源码

如果您还没有听说过 ,那么您很快就会知道。 这是业界保存最完好的秘密之一,但无处不在。 所有主要的浏览器都支持它,并且它也在服务器端使用。 它很快。 它被用于游戏。 它是万维网联盟(W3C)的开放标准,万维网联盟是Web的主要国际标准组织。

您可能会说:“哇,这听起来像是我应该学习编写的东西!” 你是对的,但你也是错的。 您不需要在WebAssembly中进行编码。 我们花一些时间来学习通常被缩写为“ Wasm”的技术。

它从哪里来的?

大约十年前,人们越来越认识到,广泛使用JavaScript不足以用于许多目的。 JavaScript无疑是成功和方便的。 它可以在任何浏览器中运行,并启用了我们今天认为理所当然的动态网页类型。 但这是一种高级语言,设计时并未考虑到计算密集型工作负载。

但是,尽管负责领先的Web浏览器的工程师通常在性能问题上达成共识,但他们在解决该问题上并不一致。 两个营地出现了。 Google开始了其Native Client项目,后来又推出了Portable Native Client变体,着重于允许用C / C ++编写的游戏和其他软件在Chrome的安全隔间中运行。 同时,Mozilla赢得了Microsoft的asm.js的支持,该方法更新了浏览器,因此可以非常快速地运行JavaScript指令的低级子集(另一个项目使C / C ++代码可以转换为这些指令)。

在这两个阵营都没有得到广泛采用的情况下,各方同意在2015年围绕一种称为WebAssembly的新标准,以asm.js所采用的基本方法为基础,共同努力。 “在当今的Web上,浏览器JavaScript将这些指令转换为机器代码。但是,在WebAssembly中,程序员在此过程的早些时候做了很多工作,生成了介于两种状态之间的程序这使浏览器摆脱了创建机器代码的繁重工作,但也实现了Web的承诺-该软件将在具有浏览器的任何设备上运行,而不管底层的硬件细节如何。”

,WebAssembly工作组发布了三个WebAssembly规范作为W3C的建议。

WebAssembly为可执行程序,相应的文本汇编语言和接口定义了可移植的二进制代码格式,以促进此类程序与其宿主环境之间的交互。 WebAssembly代码在低级虚拟机中运行,该虚拟机模仿可以在其上运行的许多微处理器的功能。 通过即时(JIT)编译或解释,WebAssembly引擎可以以几乎为本机平台编译的代码速度执行。

为什么现在感兴趣?

当然,最近对WebAssembly感兴趣的部分原因是最初希望在浏览器中运行更多计算密集型代码。 特别是笔记本电脑用户,他们的时间越来越多地花在浏览器上(或者,对于Chromebook来说,基本上是所有时间)。 这种趋势已迫切需要消除在浏览器中运行各种应用程序的障碍。 这些障碍之一通常是性能的某些方面,而这正是WebAssembly及其前身最初旨在解决的问题。

但是,WebAssembly不仅适用于浏览器。 在2019年, (WebAssembly系统接口)的项目,以标准化WebAssembly代码如何与浏览器上下文之外的操作系统进行交互。 通过对WebAssembly和WASI的浏览器支持的组合,编译后的二进制文件将能够在浏览器的内部和外部在不同的设备和操作系统上以接近本地的速度运行。

WebAssembly的低开销立即使其可以在浏览器之外使用,但这无疑是赌注。 运行应用程序的其他方式显然不会带来性能瓶颈。 为什么要专门使用WebAssembly?

一个重要的原因是它的可移植性。 如今,像C ++和Rust这样的广泛使用的编译语言可能是与WebAssembly关联最紧密的语言。 但是, 可以在WebAssembly中编译或在虚拟机中使用其虚拟机。 此外,尽管WebAssembly为其执行环境 ,但它被设计为在各种操作系统和指令集体系结构上有效执行。 因此,WebAssembly代码可以使用多种语言编写,并可以在多种操作系统和处理器类型上运行。

WebAssembly的另一个优势来自于代码在虚拟机中运行的事实。 结果,每个WebAssembly模块都在沙盒环境中执行,并使用故障隔离技术将其与主机运行时分开。 这意味着,除其他外,这意味着应用程序与其他宿主环境隔离地执行,并且必须通过适当的API才能逃脱沙箱。

Web大会在行动

在实践中这一切意味着什么?

是WebAssembly实际应用的一个例子。

Enarx是一个提供硬件独立性的项目,可使用受信任的执行环境(TEE)保护应用程序的安全。 Enarx使您可以安全地将编译为WebAssembly的应用程序始终交付到云提供程序中,并远程执行它。 正如红帽安全工程师 :“我们这样做的方式是,我们将您的应用程序作为输入,并使用远程硬件执行证明过程。我们验证远程硬件实际上是硬件它的最终结果不仅是提高了对我们正在谈论的硬件的信任度;而且还是会话密钥,我们可以用来提供加密的代码和数据在我们刚刚要求加密证明的环境中。”

另一个例子是开放策略代理OPA,它于2019年11月 ,您可以将其策略定义语言Rego 为WebAssembly。 使用Rego,您可以编写逻辑来搜索和组合来自不同来源的JSON / YAML数据,以询问诸如“是否允许使用此API?”之类的问题。

OPA已用于启用策略的软件,包括但不限于Kubernetes。 使用OPA之类的工具简化策略在各种不同环境中正确保护Kubernetes部署 。 WebAssembly的可移植性和内置的安全功能非常适合这些工具。

我们的最后一个示例是 。 还记得我们在文章开头提到过WebAssembly用于游戏吗? 好吧,跨平台游戏引擎Unity是WebAssembly的早期采用者,它提供了在浏览器中运行的Wasm的首个演示,并且自2018年8月以来, 用作Unity WebGL构建目标的输出目标。

这些只是WebAssembly已经开始产生影响的几种方式。 在了解更多信息并了解Wasm的所有最新信息。

翻译自:

谈论源码

转载地址:http://bvdzd.baihongyu.com/

你可能感兴趣的文章
边工作边刷题:70天一遍leetcode: day 33
查看>>
第10章 系统级I/O(下)
查看>>
mysql foreign key(外键) 说明与实例
查看>>
二叉树的非递归遍历
查看>>
android中Activity布局以及实例
查看>>
jsp中常用操作字符串的el表达式
查看>>
element-ui <el-input> 注册blur事件
查看>>
HTML5须知的特征和技术
查看>>
HTTP请求方式GET和POST的区别详解
查看>>
Python02_流程控制及数据结结构
查看>>
记录一个数据表联合查询过慢的“小坑”
查看>>
Java中的long与double的区别
查看>>
只出现一次的数字 [ LeetCode ]
查看>>
动手动脑3
查看>>
Oracle笔记之用户管理
查看>>
margin的相关属性:
查看>>
saas系统架构经验总结
查看>>
实现Icommand接口
查看>>
多用户ATM机(面向对象编程)
查看>>
Linux下管理软件的方法
查看>>