使用WebAssembly来加速Web
Posted ArkTeam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用WebAssembly来加速Web相关的知识,希望对你有一定的参考价值。
原文标题:Bringing the Web up to Speed with WebAssembly
原文会议:PLDI 2017
原文链接:https://pldi17.sigplan.org/event/pldi-2017-papers-bringing-the-web-up-to-speed-with-webassembly
可下载链接:https://dl.acm.org/citation.cfm?id=3062363
Web平台的成熟引发了复杂和性能要求苛刻的Web应用程序,如交互式3D可视化,音频和视频软件以及游戏。因此,Web平台上代码的高效性和安全性变得越来越重要。然而,javascript作为Web平台(浏览器)唯一内置的语言,并不能很好地满足上述需求。
来自四大浏览器供应商(Google, Mozilla, Microsoft, Apple)的工程师已经面对这一挑战,合作设计了一个名为WebAssembly的可移植的底层字节码。它提供严谨的格式、有效的验证和编译、低或无开销安全执行。WebAssembly不针对特定的编程模型,而是对现代硬件的一层抽象,这使得WebAssembly和语言、硬件、平台无关,其平台也不仅仅局限于Web。WebAssembly从一开始就被设计为具有正式的语义。论文描述WebAssembly的动机,设计和形式语义,并提供一些实现的初步经验。论文的信息量很大,为了避免篇幅过长,本文仅简单介绍一下WebAssembly的基本概念和直观的性能提升效果。
一、基本概念。
文章在第一章首先介绍了WebAssembly的一些特性,即安全性、运行速度、可移植性,压缩性(WebAssembly二进制格式非常紧凑,对于通过网络传输的代码来说能够占用较小带宽,提升加载速度)。同时,文章也回顾了在浏览器中运行底层代码在过去的解决之道。例如Microsoft's ActiveX,Native Client、Emscripten等等。论文比较详细地介绍了WebAssembly的抽象语法,如图1所示。
图1 WebAssembly抽象语法
二、性能测试
论文首先以本机代码(Native Code,使用Clang生成)的运行时间为基准,使用PolyBenchC对WebAssembly(使用Emscripten生成)进行了性能测试,测试结果如图2所示。在这张图里使用Native Code运行时间做归一化,所以100%的一条横线是Native Code的运行时间,Native Code是用Clang编译的真正的二进制程序,WebAssembly有4中情况运行速度更快,7种情况最多没有超过Native Code 的10%,而大部分情况是没有超过Native Code的200%的,这个性能对于运行在V8和SpiderMonkey浏览器引擎里的代码来说,已经非常快了。
图2 WebAssembly与Native Code运行时间对比
对于WebAssembly和asm.js的速度对比,论文没有进行画图比较,作者提到了WebAssembly相较于asm.js快了33.7%。另外,对于代码的紧凑性,实验也进行了比较。论文比较了WebAssembly和asm.js,以及WebAssembly和x86-64本机代码(Native Code)。图3用比值的形式直观地对比了二进制代码的紧凑性。
图3 WebAssembly与asm.js和NativeCode二进制大小对比
平均来说,WebAssembly代码是asm.js的大小的62.5%(中位数68.6%),以及本机x86-64代码大小的85.3%(中位数78%)。
三、总结
论文中提出的新技术已经在四大主流浏览器引擎中得到了实现。虽然WebAssembly于2017年11月开始受到四大主流浏览器支持,到现在也仅仅过去半年,还有很多需要完善的地方。但是WebAssembly是Web的一个新趋势,其更加广泛的应用势必会给Web带来新的能力和发展空间,同时可能也会为Web安全带来一个全新的领域。
以上是关于使用WebAssembly来加速Web的主要内容,如果未能解决你的问题,请参考以下文章
如何使用WebAssembly将Web应用的速度提高20倍(案例研究)
使WebAssembly更快:Firefox最新的流式分层编译器
使WebAssembly更快:Firefox最新的流式分层编译器