当前位置: 首页 > 网络应用技术

再次了解WebAssembly

时间:2023-03-07 02:27:02 网络应用技术

  WebAssembly(WASM)是基于堆栈的虚拟机的二进制指令格式。低级别的组装语言旨在非常接近编译的机器代码,并且非常接近该机器的性能。我引入了上一篇文章“快速了解WebAssembly”。本文介绍了其优势并再次使用方案,并通过代码体验WebAssembly项目的开发过程。

  简而言之,这是一个汇编目标。它可以使用大约30种类型的语言使用特定于WebAssembly编译并将其编译成文件的工具来编译它。目前最受欢迎的语言是(因为它们是因为他们自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己自己动邦本身本身。管理记忆,不需要垃圾收集器)。支持和生态系统支持也正在迅速增长。编译的文件可以在浏览器或服务器上。该文件包含虚拟机可以读取的二进制指令,并且因为虚拟机器机器针对它,它适用于许多芯片架构。它针对流行硬件的最低限度的母亲。

  它最初是为浏览器构建的,但是随着技术的成熟,在服务器端看到越来越多的用例。本文再次介绍了WebAssembly的优点和应用程序方案,并通过示例了解其项目开发的过程,请单击查看代码。

  WASM允许使用熟悉的语言编写代码并在任何地方运行。

  服务器上的快速启动时间比容器更快地实现冷启动时间,因为它不需要为每个容器创建OS进程。在浏览器中,解码比解析,解释和优化JavaScript更快,因此执行速度是执行速度浏览器中的代码的速度比JavaScript的代码快。

  关于主要绩效的性能细节存在一些争议,但其优势是,它允许用户将其应用程序的计算部分封装到较低的语言中。绩效优势的许多优势来自于此(这是WASM代码)构建是因为机器代码尽可能接近机器代码。

  轻量级二进制文件的尺寸很小,因此仅使用一个小带宽。通常,它的成本低于浏览器中JavaScript的交叉填充。

  它可以在任何运行中运行任何代码(尽管并非所有扩展程序都在所有运行时都支持,即不同的接口类型)。大多数浏览器支持WebAssembly,并且在服务器上运行的许多运行WASM代码)。鉴于浏览器和服务器(以及硬件)的广泛支持,它具有移民,也很常见。大约可以在其中编译或执行约30种语言(C,C ++,Rust,Python,Go,assemblyscript,JavaScript,JavaScriptETETC)。

  安全WebAssembly安全模型的两个目标是:(1)保护用户免受错误和恶意模块的影响;(2)为开发人员提供开发安全应用程序所需的原始条款。在此范围内,范围是有限的,并且在WASM期间运行的代码受内存沙盒和功能的限制。

  以上几点使客户端和服务器应用程序变得有趣。在客户端,有一个世界(部分),因为浏览器最终成为运行所有应用程序的默认操作系统。在服务器上,它可能成为下一个默认的容器系统。将做虚拟机对Docker的操作。正如Fermyon的Matt Butcher所说:

  如果VM是云计算的重量级,并且容器是中间的,那么WebAssembly是轻量级的理想选择。

  WASM将提供快速安全的客户端和服务器应用程序。有哪些应用程序方案?

  基于无花果用例加速Web应用程序,使用WASM,您可以在JavaScript中编写应用程序的性能/计算部分,然后用更高的性能语言替换JavaScript,例如。但是情况并非总是如此。

  一切都是一次(Web)应用程序编写的,并在任何地方运行。WebAssembly希望实现由Sun Microsystem创建的Java相关术语的梦想。这在实践中并不是一个简单的壮举,但是WASM肯定可以将应用程序带入以前的本地网络(和其他平台)(和其他平台)。。

  插头 - 非常适合在隔离沙盒中执行不愿代码。一开始,大多数平台都大,插件系统最终将构建,使最终用户能够构建与其平台交互的自定义软件。通过在此插件中使用它 -在系统中,该平台允许其用户构建插件 - 任何语言,而不必担心允许用户执行不明显的代码的安全风险,因为代码是沙盒。在这里还播放了其他所有好处:速度,小型二进制文件和快速加载。默认情况下,每个插头系统都需要高性能,安全易于使用,并有助于实现此目标。

  如上所述,新的容器系统具有受限的安全模型。这是一个交叉操作系统。它具有快速的寒冷开始时间和出色的性能。这些都是可以取代新的Docker容器系统的吸引人的功能。正如所罗门·海克斯(Solomon Hykes)在推文中所说,这是一个缺失的链接,真正促进了这种新容器系统的开发。

  Bag Manager WebAssembly将具有包装注册表和经理。WAPM是第一个尝试此操作的人。一旦WASI和组件模型无处不在,就会有许多令人信服的理由来解释为什么使用WASM软件包经理。

  在浏览器中,WebAssembly可能很棒,因为它对性能强度的Web应用程序非常有用:让它们在Web上有效运行。根据WebAssembly文档的符号,该示例包括轻量级游戏,资产 - 密集型AAA游戏和Point -Point--对于需要快速启动的 - 符合WebAssembly文档,它可用于在服务器上创建游戏分配服务,以便可以移植和安全。

  区块链人们一直在谈论WASM作为EVM的替代方案。Parity以太坊客户端在WASMI中运行WASM字节码,它使WASM代码能够访问区块链并与之互动。另一个很好的例子是EWASM,目前正在将其作为EVM1替代方案(来源)进行研究。与以太坊区块链互动以支持更多语言。

  不信任代码的服务器侧计算的计算是服务器的计算 - 类似于令人难以置信的代码。许多平台最终将披露其自己的系统,使最终用户可以在其平台上编写代码,例如Airtable脚本。像Airtable这样的平台允许用户在Airtable脚本平台上编写用多种语言编写的功能。

  没有服务器计算非服务器函数是WebAssembly的理想场景。WASM的沙箱,性能,快速启动时间和语言支持使其成为没有服务器功能的完美技术。

  机器学习在真实的物联网/连接设备中变得越来越受欢迎,并且执行真实的机器学习非常重要。在像Wasmedge这样的运行时,可以运行。

  本文将使用汇编来构建“ Hello World”,创建一个项目目录并执行命令:

  初始化完成后继续执行:

  安装后,编译器提供了方便的脚手架实用程序,以快速在当前目录中设置一个新项目:

  该命令将自动创建推荐的目录结构和配置文件:

  接下来,创建一个存储JavaScript,创建文件的代码文件,以及使用WebAssembly Web API加载WASM模块的函数:

  接下来,实例化模块由上述函数加载。从WASM模块调用导出函数:

  返回到项目目录中的HTML文件,代码如下:

  启动程序:

  您可以看到效果。请注意最新版本,以将节点环境升级到版本16或更多版本。Github上的代码是一个更复杂的示例(来自官方)。操作的效果如图所示:

  原始:https://juejin.cn/post/7111637167256338440