全网最火的5+优秀 WebAssembly 运行时!

大家好,很高兴又见面了,我是”高级前端?进阶?”,由我带着大家一起前端前沿、深入前端底层技术,大家一起进步,也欢迎大家、、收藏、转发!
高级前端?进阶
今天给大家带来的主题是全网最火的运行时,话不多说,直接开始!
前言
是除了以外,另一种可以在网页中运行的编程语言 。过去如果开发想在浏览器中运行代码来对网页中各种元素进行控制,只有这一种选择 。
所以当人们谈论的时候 , 往往会拿来进行比较 。但是它们其实并不是“二选一”的关系 , 即并不是只能用或者。
实际上,浏览器鼓励开发者将这两种语言一起使用,即使不亲自实现模块,也可以学习它现有的模块打开浏览器cpu占用过高怎么办,用它的优势来实现功能 。
图片来自:
模块定义的一些功能可以通过来直接调用 。所以就像开发者通过 npm 下载模块并通过 API 使用它一样,现在开发者也可以直接下载模块并且使用其提供的功能 。
总之 ,  是一种偏底层、可移植的二进制格式 , 旨在由现代 Web 浏览器和其他运行时环境高效执行 。它旨在成为高级编程语言的编译目标,用于构建在不同平台和设备之间共享的应用程序和库 。
接下来,带着大家一起来看看目前最火的几个运行时 。
1..1 是什么
是一个轻量级、高性能和可扩展的运行时,它是当今号称最快的 Wasm VM 。
是由 CNCF 托管的官方沙箱项目,而CNCF 是一个开源的、供应商中立的云原生计算中心,托管和等项目,使云原生具有普遍性和可持续性 。
的用例包括现代 Web 应用程序架构(同构和应用程序)、边缘云上的微服务、无服务器 SaaS API、嵌入式功能、智能合约和智能设备等方方面面 。
是世界上第一个正式的 CNCF运行时项目,可以设想它将作为边缘云的关键任务轻量级运行时,在 CNCF 的开源云计算领域发挥重要作用 。
1.2 的主要特征
可以运行从 C/C++、Rust、Swift、 或源代码编译的标准字节码程序 。同时,它还受到标准语言和编译器工具链的支持,例如 LLVM、Rustc 和。
在安全、快速、轻量、可移植和容器化的沙箱中运行,包括第 3 方 ES6、CJS 和 NPM 模块 。它还支持混合使用这些语言(例如,使用 Rust 实现API)、Fetch API 和边缘服务器上的服务器端渲染 (SSR) 功能 。
目前支持所有标准的功能和扩展提案,例如:WASI 规范、引用类型、批量内存操作和 SIMD,同时也在积极探索 wasi- 提案以支持程序中的网络访问 。它还支持许多为云原生和边缘计算量身定制的扩展 。例如,网络套接字和扩展 。
还支持针对特定应用场景设计的非标准扩展 。
由C++编写,目前在上有5.6K的star、500+ fork、确实有一定的热度 。
2..1 是什么
是在非浏览器上下文中运行 Wasm 的一种方式,提供基于的超轻量级容器 。专注于支持在任何平台上运行 WASM 代码,为其他跨平台运行时(例如 Java)提供了潜在的替代方案 。
在上将自己描述为“一个快速且安全的运行时,它使超轻量级容器可以在任何地方运行:从桌面到云、边缘和物联网IOT设备” 。
使用熟悉的工具和喜欢的语言,将所有内容编译为。可以在任何操作系统上运行它或将其嵌入到其他语言中 。
2.2 主要特征
有以下明显特点:
是一个 开源的编译器,可以将 C/C++ 的代码编译成胶水代码或者 代码
尝试可以从运行开始 , 这是一个编译为模块 (qjs.wasm:查看文末资料下载) 的小型可嵌入引擎:
$ wasmer qjs.wasmQuickJS - Type "h" for helpqjs > const i = 1 + 2;qjs > console.log("hello " + i);hello 3
由Rust编写,目前在上有14.6K的star、600+ fork、超过4.9K的项目使用它 。
3.WAVM3.1 什么是WAVM
WAVM( 虚拟机)是(WASM) 的高性能、可移植运行时,可以在独立环境中或作为主机应用程序的一部分执行 WASM 模块 。它的设计轻量、高效,可用于在各种上下文中执行 WASM 模块 , 包括服务器、命令行工具和浏览器扩展 。
WAVM 是可以执行 WASM 模块的几个运行时环境之一,并且以其对性能和灵活性的而著称 。
WAVM 在 C++ 中实现,并在 MIT 许可证下发布 。它是开源的并且积极开发 , 非常注重安全性、可移植性和与 WASM 规范的兼容性 。它可以用作独立的运行时或集成到其他应用程序和环境中,适用于广泛的用例,包括服务器端执行、命令行工具和浏览器扩展 。
3.2 WAVM特点快速
WAVM 使用 LLVM 将代码编译为机器代码,性能接近原生 。在某些情况下 , 它甚至可以超越本机性能,这要归功于生成特定CPU运行机器代码的能力 。
WAVM 还利用虚拟内存和信号处理程序来执行的边界检查内存访问 , 其成本与本机未经检查的内存访问相同 。
【全网最火的5+优秀 WebAssembly 运行时!】安全
WAVM 阻止代码访问虚拟机之外的状态,或调用您未明确链接到模块的本机代码 。
WAVM 容易受到某些边信道攻击(Side- ),例如变体 2 。WAVM 可能会为特定的边信道攻击添加进一步的缓解措施 , 但要防范所有此类攻击是不切实际的 。
您应该使用另一种隔离形式 , 例如操作系统进程,以保护敏感数据免受不受信任的代码的影响 。
便携
WAVM 是用可移植的 C/C++ 编写的,带有少量特定于体系结构的汇编和 LLVM IR 生成代码 。
WAVM 在 X86-64 、MacOS 和 Linux 上经过测试并完全支持 。它旨在在任何 POSIX 兼容系统上运行,但并未在其他系统上进行例行测试 。
对的支持正在进行中 。WAVM 主要在Linux 上运行,但在处理堆栈溢出和部分越界存储方面存在一些已知错误 。
WAVM 的运行时需要 64 位虚拟地址空间 , 因此不能移植到 32 位主机 。然而,WAVM 的汇编器和反汇编器在 32 位主机上工作 。
完全支持 1.0+可扩展
WAVM 完全支持1.0,并加上许多扩展:
WAVM由C++编写 , 目前在上有2.4K的star、200+ fork 。
4..1 什么是
是一个字节码联盟项目,它是一个独立的 wasm-only 优化运行时,用于和 WASI 。它可以在 Web 环境之外运行代码,既可以用作命令行程序,也可以用于嵌入到更大应用程序中的库 。
致力于成为一个高度可配置和可嵌入的运行时,以在任何规模的应用程序上运行,不过目前许多功能仍在开发中 。
4.2 特点
如果已经安装了 Rust 编译器 , 那么可以获取一些 Rust 源代码:
fn main() {println!("Hello, world!");}
然后通过编译和执行:
$ rustup target add wasm32-wasi$ rustc hello.rs --target wasm32-wasi$ wasmtime hello.wasmHello, world!
由Rust编写、目前在上有11.7K的star、900+ fork,超过16.5K的项目使用它 。
5.其他Wasm运行时5.1 Wasm3
快速的解释器和最通用的 WASM 运行时 。
A fast, and the mostWASM .
Wasm3 可以用作的库包含: 、 Rust 、 C/C++ 、、Zig 、Perl Swift 、 .Net 、Nim 、 、 、 、等等
wasm3 通过了规范测试套件,能够运行诸多 WASI 应用程序 。最低系统要求:~64Kb 代码和~10Kb RAM 。wasm3 可在多种架构(x86、、ARM、RISC-V、、MIPS、、ARC32 等)和平台上运行:
Wasm3由C语言编写、目前在上有5.9K的star、360+ fork 。
5.3 wasm-micro-
Micro(WAMR) 是一个轻量级的独立(WASM) 运行时,具有占用空间小、高性能和高度可配置的特性 。适用于从嵌入式、物联网、边缘到可信执行环境 (TEE)、智能合约、云原生等应用程序。它包括以下几个核心组成部分:
Micro 由C语言编写、目前在上有3.6K的star、450+ fork , 代码贡献者超过100+ 。
6.本文总结
本文主要和大家介绍前端最火的几个运行时,包括:、、WAVM、、Wasm3、WAMR等等以及它们的特点 , 其中和由Rust编写打开浏览器cpu占用过高怎么办,而和WAVM由C++编写,Wasm3、WAMR由C语言编写 。关于六个运行时到底哪个最好,文章并没有给出答案,大家可以在实际项目中探索 。
针对每一个运行时,后续都会单独出文进行详细介绍 。如果有兴趣,可以直接在我主页继续阅读,但是文末的参考资料提供了大量优秀文档以供学习 。最后,欢迎大家、评论、转发、收藏!
参考资料
本文到此结束 , 希望对大家有所帮助 。