WASM的世界

485次阅读  |  发布于1年以前

你是否也被WebAssembly这个词所吸引?它究竟是什么?为什么它如此受欢迎?在讨论技术细节之前,让我们先了解一些背景信息。

浏览器是如何工作的?

我们使用浏览器从网络的任何地方访问信息,HTTP协议用于在客户端(如web浏览器)和web服务器之间传输数据。现在,浏览器以HTML(超文本标记语言)格式获取这些数据,并使用渲染引擎将其转换为文本、图像、视频和我们在互联网上体验到的所有内容。但是渲染引擎有一个问题,它只理解有限的几种语言。

Web平台是什么样子的?它能理解什么?

“网络平台是一系列技术的集合,包括计算机语言和api,这些技术都是为了发布网页而创建的。”

通常,web平台分为两部分:一个只理解HTML、CSS和Javascript的虚拟机和一组处理这些功能的web api (DOM、CSSOM、IndexedDB等)。如果你从事过web开发工作,或者听过一些人谈论过它,你很快就会发现都是关于这三种语言和web api的。

第四种语言——WebAssembly的出现

“WebAssembly是一种可以在现代浏览器中运行的新型代码——它是一种底层的类似于汇编的语言,具有紧凑的二进制格式,运行起来具有接近本机的性能,并为C/C++、c#和Rust等语言提供编译目标,以便它们可以在web上运行。”

什么是WebAssembly?

首先,它是一种底层的、具有二进制格式的类似汇编的语言。对于任何人来说,只使用0和1来编码都是非常乏味的,你也不必这样做。因此,有2个解决方案:

第一种方法是相当直接的,重要的是WebAssembly的文本格式更易于可读和调试。就第二种方法而言,WebAssembly成为C、C++、Rust等源语言的编译目标。这意味着什么?你现在几乎可以用任何语言编写代码,将它们编译成.wasm并在浏览器中运行。

其次,wasm高效快速,几乎与本机代码的性能相当(尽管分析WASM与本机代码的性能比较仍然是一个讨论点)。

WebAssembly的第三个重要方面是安全性。因为WASM代码运行在由虚拟机管理的沙箱环境中,所以它不能直接与主机的操作系统交互。访问系统资源,如文件、硬件或互联网连接,只能通过虚拟机的WebAssembly系统接口(WASI)。

Javascript vs WebAssembly

WebAssembly听起来很有前途,也很有优势。这是否意味着它最终将取代Javascript?

WebAssembly是用来补充JavaScript而不是取代它的,要加载WebAssembly模块,需要一些JavaScript代码。WebAssembly的目的是与JavaScript协同工作,使web开发人员能够利用这两种语言的优势。这意味着JavaScript框架可以从WebAssembly中获益,提供显著的性能改进和新特性,同时仍然使web开发人员可以轻松地访问功能。

WASM的应用

我们已经听说了这项技术有多么不可思议,WebAssembly在现实世界中有什么应用吗?目前只有一小部分科技巨头正在采用它。

想象一下,所有基于桌面的应用程序、具有复杂系统要求的游戏、视频编辑器、AR-VR应用程序和使用大量数据的应用程序都能够在浏览器上运行!这是WebAssembly的应用之一。WASM可以征服javascript不能做的所有性能密集型领域,包括但不限于记录和编码音频,编码视频,实时渲染3d对象,编辑和注释pdf,实时可视化数据,实时物理模拟,以及许多其他用例。

对于所有C、C++、Rust和其他语言爱好者来说,Javascript是唯一能够在浏览器上运行的语言,现在利用WebAssembly,程序员可以用近40种其他语言编写的代码在浏览器中运行,可以提供比Javascript更好的用户体验。

此外,WebAssembly支持客户端压缩,这将导致更快的加载时间和更低的带宽利用率。这使得在利用服务器资源之前,可以使用客户端的CPU或硬件来执行压缩和解压缩活动。

如果你已经看到这里,我相信WebAssembly已经激起了你的兴趣。在下一篇文章中,我们将尝试编写一些Rust代码(WebAssembly的首选语言),将其与几行HTML和JS粘合在一起,并在web浏览器中运行。然后,我们尝试使用wasm运行时:WasmEdge,在没有web浏览器的情况下执行wasm代码。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8