当前位置: 首页 > news >正文

在Firefox 58中,WebAssembly组件性能提升了10倍

Mozilla在Firefox 58中为WebAssembly(WASM)组件推出了一套双层编译系统,号称解析和编译WASM代码的速度达到30-60MB/s,足够在有线网络中实现实时编译。基准测试表明,新版的性能比旧版提高了10倍,比Chrome快10倍以上。

在Mozilla Hacks博客的一篇文章中,Lin Clark列举了一些测出的性能数据:

在一部台式机上,我们编译WebAssembly代码的速度高达30-60MB每秒,比网络传输数据包的速度都快。

使用Firefox Nightly或Beta的用户可以在自己的设备上体验这一进步。即使在性能一般的移动设备上编译速度也有8MB/s,快过绝大多数移动网络的平均下载带宽。

独立测试人员复现了类似的测试结果。 Reddit用户a_potato_is_missing用Luke Wagner的tanks编译速度测试做了对比,他使用一台安装了安卓系统的华为P10 Lite进行测试,结果显示,在Firefox v57中的编译速度为1.7MB/s,换成Firefox v58就提升到了11.8MB/s。 Windows 10桌面平台的测试中,编译速度从v57上的9MB/s提高到了v58上的52.8MB/s。相比之下,Chrome在Android设备上只跑了1MB/s,桌面平台上只有4.1MB/s,远远落后。

这次性能提升之前,人们已经发现WebAssembly组件的速度比JavaScript更快了。此前的报告中,Figma的一篇案例分析显示,切换到WebAssembly可以带来3倍的加载速度;Hackernoon公布的基准测试则表明,计算密集型图形程序的执行速度提升了30%。

在一篇博文中,Lin Clark详细介绍了编译器如何利用Firefox的并行架构将编译任务拆解为两个独立的线程。第一个线程直接启动,实时将网络传输来的代码编译成一个基础版本;第二个线程则在后台将这个基础版本进一步编译为优化好的版本。优化版本编译完成后就会替换掉基础版本,进一步提升代码运行效率。

这次改进意味着WebAssembly可以在网络传输代码的同时实时编译出结果。Yehuda Katz指出了这一进步对web开发的意义:

JavaScript代码需要花费时间解析编译,所以资源消耗远比相同大小的图像文件要多。如今WASM可以做到实时解析和编译,其资源消耗就更接近图像文件,比JavaScript省力多了。改变游戏规则啊!

相关文章:

  • WebAssembly,开发者赢了

  • WebAssembly:随风潜入夜

  • 实验进行中:.NET WebAssembly支持

  • 使用Mono将C#编译运行至WebAssembly平台

原文发布时间:2018年02月07日

作者:Kevin Ball

本文来源:InfoQ  如需转载请联系原作者


相关文章:

  • Java之jdbc_采用Statement查询全部数据
  • Node学习4-Buffer模块
  • nginx 和apache 性能测试对比
  • 初识 Vue(07)---(Vue 实例的生命周期钩子)
  • 征服 TIME_WAIT !
  • 如何给操作文档添加目录
  • 保存Hive查询结果的方法
  • Session
  • greenplum安装文档
  • 第42件事 移动App设计的11大法则
  • 解决网站访问流量过大问题
  • Java高级编程——MySql采用的算法原理
  • Nginx设置多条件判断访问控制
  • Magento搜索产品结果不精准的问题
  • spring boot slf4j日记记录配置详解
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • IndexedDB
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java比较器对数组,集合排序
  • js中的正则表达式入门
  • Next.js之基础概念(二)
  • node学习系列之简单文件上传
  • python 装饰器(一)
  • React中的“虫洞”——Context
  • Redux系列x:源码分析
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • uva 10370 Above Average
  • Yii源码解读-服务定位器(Service Locator)
  • 分享一份非常强势的Android面试题
  • 微信开源mars源码分析1—上层samples分析
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 移动端高清、多屏适配方案
  • ​ssh免密码登录设置及问题总结
  • ​什么是bug?bug的源头在哪里?
  • ​业务双活的数据切换思路设计(下)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (2)MFC+openGL单文档框架glFrame
  • (6)添加vue-cookie
  • (9)STL算法之逆转旋转
  • (C语言)字符分类函数
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (java)关于Thread的挂起和恢复
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (学习日记)2024.01.19
  • (转)可以带来幸福的一本书
  • .java 9 找不到符号_java找不到符号
  • .net framework4与其client profile版本的区别
  • .net 中viewstate的原理和使用
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net的socket示例
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递