WebAssembly入门指南 – 第1部分:WASM简介
你是否曾经想过以本地应用程序的性能运行网络应用程序?如果是的话,你有一个令人兴奋的选择:WebAssembly,也被称为WASM。
当前的网络技术注重功能丰富的方法。以JavaScript为例,你可以使用JavaScript操作DOM,在浏览器上绘制漂亮的图形甚至运行游戏。然而,在浏览器中执行JavaScript代码相对较慢,且不适合执行性能导向的任务。
在本文中,我们将更详细地了解WebAssembly。让我们开始吧。
什么是WebAssembly?
WebAssembly是一种在现代网页浏览器上运行的新型低级语言。它提供了一种紧凑的二进制格式,能够以接近本地应用程序的性能执行。
WebAssembly的设计选择与Rust、C++和C等编程语言的性能相匹配,这些编程语言能够直接与硬件通信以实现本地性能。
WebAssembly将用C、C++和Rust编写的源代码转换为低级语言,作为这些编程语言的有效编译目标。它为网络应用程序提供了在网络上以接近本地速度运行的路径。
要理解完整的图景,我们需要从JavaScript开始。
JavaScript是网络的语言。它广泛存在于所有现代网络应用程序中。然而,JavaScript作为一种动态类型语言,它的运行速度较慢。在运行时,会进行类型检查,并且代码会通过V8解释器动态转换为机器代码。只有在这之后,机器代码才会执行。
引入WebAssembly in V8为在网络上开发和运行高性能应用程序打开了大门。它使开发人员能够使用C、C++或Rust编写其代码库的特定部分。
然而,这并不意味着你必须在WebAssembly中编写所有的应用程序代码。你只需要编写你的网络应用程序以通过JavaScript调用WebAssembly的API和函数即可。 JavaScript frameworks可以利用WebAssembly提高开发人员的性能,同时提供出色的开箱即用功能。
使用WebAssembly的一个很好的例子是在浏览器上运行强大的视频处理工具FFmpeg。以前,你无法使用Emscripten这个编译器工具链将FFmpeg运行为WebAssembly。
然而,近年来,使用ffmpeg.wasm完全可以在浏览器中运行FFmpeg。这个JavaScript/WebAssembly端口使你能够直接在浏览器中对视频进行切割、处理和转换。
WebAssembly的特点
WebAssembly的特点简单明了。它快速、便携和高效。默认情况下,WebAssembly利用底层硬件提供接近本地执行速度。考虑到它在类似于JavaScript在浏览器上运行的沙盒环境中运行,它也是安全的。
尽管WebAssembly是一种低级汇编语言,但它仍然提供一个可以调试的界面,拥有可读性强的文本格式。因此,如果你想调试WASM代码,可以打开链接_5的代码,像调试其他任何编程语言一样进行调试。
最后,浏览器不需要等待整个WebAssembly代码下载才开始编译。例如,浏览器接收到WebAssembly负载后会立即开始编译。因此,对于一个500 KB的WebAssembly负载,浏览器会从接收到的第一个字节开始编译。
WebAssembly会取代JavaScript吗?
WebAssembly works在网络生态系统中完美共存。因此,如果选择使用WebAssembly,你不必替换任何东西。WebAssembly与JavaScript一起工作,使你能够编写基于性能的网络应用程序。
在开发您的Web应用程序时,您可以在JavaScript代码中调用WASM函数。在实际应用中,您只希望使用WebAssembly进行CPU密集型任务。
此外,WebAssembly无法访问或操作文档对象模型(DOM)对象。这就是为什么您仍然需要JavaScript来开发Web应用程序的原因。
WebAssembly的限制
WebAssembly确实具有一些限制,这些限制包括以下内容:
- WASM无法进行UI或前端操作,因为它无法与DOM交互。为了克服这个问题,您需要使用JavaScript。
- WASM不提供任何内存管理工具。这意味着它不提供垃圾收集器。
- WebAssembly确实存在一些安全问题,特别是对于Web浏览器而言。目前,没有工具可以验证WASM代码。因此,如果有人插入malicious code,就无法检查它。
- 尽管WASM为程序员提供了一种人类可读的文本格式,但分析和调试仍然可能很困难。
WASM的路线图和社区支持
WebAssembly是一种新兴技术,仍在不断发展中。目前,包括Edge、Chrome、Firefox和WebKit在内的四个主要浏览器都支持它。因此,如果您为Web创建应用程序,选择WASM仍然不是一个理想的选择,因为并不是所有浏览器都支持WASM。
WASM遵循Web标准。 W3C WebAssembly Working Group和Community Group正在与主要浏览器供应商合作,使WASM更加普及。
最后的话
WebAssembly为开发人员提供了创建高性能Web应用程序所需的工具。它提供了针对更快输出的代码的专门执行。然而,它仍处于起步阶段。WASM仍需要时间来获得社区的广泛支持。目前,只有四个主要的browsers支持WASM。
接下来,您可以查看Web Assembly Part 2: Goals, Key Concepts, and Use Cases。