ce安全网绿色资源分享

教程资讯|常用软件|安卓下载|下载排行|最近更新

软件
软件
文章
当前位置:首页网络安全网络安全新闻 → 让WebAssembly更快:Firefox的新的流媒体和分层编译器

让WebAssembly更快:Firefox的新的流媒体和分层编译器

时间:2018-01-18 00:00:00人气:作者:本站作者我要评论

人们称WebAssembly为游戏转换器,因为它可以更快地在Web上运行代码。其中一些加速已经存在,一些还没有到来。
其中一个加速是流编译,即浏览器在代码被下载的同时编译代码。到目前为止,这只是一个潜在的未来加速。但随着下周Firefox 58的发布,它变成了现实。
Firefox 58还包含一个新的2层编译器。新的基线编译器比优化编译器编译代码快10-15倍。
结合起来,这两个变化意味着我们编译代码的速度比从网络进来的要快。

让WebAssembly更快:Firefox的新的流媒体和分层编译器

在桌面上,我们每秒编译30-60兆字节的WebAssembly代码。这比网络传递数据包要快。
如果您使用Firefox Nightly或Beta,则可以尝试在自己的设备上尝试。即使在相当普通的移动设备上,我们也可以以每秒8兆字节的速度进行编译 - 这比几乎任何移动网络的平均下载速度都要快。
这意味着您的代码几乎一旦完成下载就会执行。

为什么这很重要

当网站发布大量的JavaScript时,网络性能提倡者会变得棘手。这是因为下载大量JavaScript会使页面加载速度变慢。
这主要是因为解析和编译时间。正如Steve Souders所指出的,网络性能的旧瓶颈曾经是网络。但是,网络性能的新瓶颈是CPU,尤其是主线程。
所以我们希望尽可能多地从主线移动工作。我们也想尽早开始,所以我们正在利用所有的CPU时间。更好的是,我们可以做更少的CPU工作。
有了JavaScript,你可以做一些这个。你可以在主线程中解析文件,但是你仍然在解析它们,这是很多的工作,你必须等到它们被解析之后才能开始编译。而编译,你回到主线程。这是因为JS通常是在运行时懒洋洋地编译的。  有了WebAssembly,开始的工作就少了。解码WebAssembly比解析JavaScript更简单快捷。而这个解码和编译可以分成多个线程。
这意味着多个线程将进行基线编译,这使得它更快。一旦完成,基线编译的代码就可以在主线程上开始执行。它不会像JS那样暂停编译。
当基线编译的代码在主线程上运行时,其他线程也在制作更优化的版本。当更优化的版本完成时,它可以交换,所以代码运行速度更快。
这改变了加载WebAssembly的成本,更像是加载JavaScript的解码图像。考虑一下...网络性能的倡导者对于150 kB的JS有效载荷确实得到了刺激,但是相同大小的图像载荷并没有引起人们的注意。

这是因为像Addy Osmani在JavaScript的Cost中解释的那样,加载时间比图像快得多,并且解码图像并不会阻塞主线程,正如Alex Russell
在“您能承担吗?”中所讨论的那样:真实世界Web性能预算。
这并不意味着我们希望WebAssembly文件和图像文件一样大。虽然早期的WebAssembly工具创建大文件是因为它们包含了大量的运行时,
但是为了使这些文件更小,目前有很多工作要做。例如,Emscripten有一个“缩小的举措”。在Rust中,你可以使用wasm32-unknown-
unknown目标获得非常小的文件大小,而且还有像wasm-gc和wasm-snip这样的工具可以更好地优化这个工具。
这意味着这些WebAssembly文件的加载速度要比等效的JavaScript快得多。
这很大。正如Yehuda Katz所指出的那样,这是一个改变游戏规则的游戏。

第1层基准编译器:更快地编译代码

如果你想让代码运行得很快,你需要优化它。但在编译时执行这些优化需要时间,这使编译代码变慢。所以有一个权衡。
我们可以拥有这两个世界的最好的。如果我们使用两个编译器,我们可以有一个编译速度快,没有太多的优化,另一个编译代码更慢,但创建
更优化的代码。
这被称为分层编译器。当代码第一次进入时,它由第一层(或基线)编译器编译。然后,在基线编译代码开始运行后,第2层编译器再次遍历
代码,并在后台编译更优化的版本。
一旦完成,它会将优化后的代码换成以前的基准版本。这使得代码执行速度更快。
JavaScript引擎长期以来一直使用分层编译器。然而,当一些代码变得“温暖”的时候,JS引擎只会使用Tier 2(或优化)编译器。
相反,WebAssembly Tier 2编译器会热切地进行完全重新编译,优化模块中的所有代码。未来,我们可能会为开发人员添加更多选项来控制
如何进行热切或迟滞的优化。
这个基线编译器在启动时节省了大量的时间。它编译的代码比优化编译器快10-15倍。它创建的代码在我们的测试中只有2倍慢。
这意味着即使在最初的几个时刻,当代码仍在运行基线编译代码时,代码运行速度也会非常快。

并行化:使其更快

在Firefox Quantum的文章中,我解释了粗粒度和细粒度的并行。我们使用这两个编译WebAssembly。
我在上面提到,优化编译器会在后台编译。这意味着它将使主线程可用于执行代码。代码的基准编译版本可以在优化编译器重新编译时运行。
但在大多数电脑仍然留下多个核心未使用。为了充分利用所有内核,两个编译器都使用细化的并行化来分割工作。
并行化的单位是功能。每个函数都可以在不同的核心上独立编译。实际上,这是非常细致的,我们实际上需要把这些函数分成更大的函数组。
这些批次被发送到不同的核心。

...然后完全通过隐式缓存来完成所有这些工作(将来的工作)

目前,每次重新加载页面时都会重新进行解码和编译。但是如果你有相同的.wasm文件,它应该编译成相同的机器码。
这意味着大部分时间,这项工作可以跳过。而在未来,这是我们将要做的。我们将在首页加载时进行解码和编译,然后将生成的机器代码缓存
在HTTP缓存中。然后,当您请求该URL时,它将提取预编译的机器码。
这使得加载时间消失为随后的页面加载。
这个功能已经奠定了基础。我们正在Firefox 58版本中缓存JavaScript字节代码。我们只需要扩展这个支持来缓存.wasm文件的机器码。

相关文章

猜你喜欢

  • Ougishi绿色版下载 V4.00 中文版

    2020-06-19 / 561k

  • 谷歌地图下载助手睿智版破解下载 V9.5绿色版

    2020-06-19 / 32.7M

  • OfficeFIX中文破解版V6.110 注册版

    2020-06-19 / 26.8M

  • Plotagraph破解版V1.2.0 免费版 32/64位

    2020-06-19 / 31.5M

  • IP查详细地址工具下载 V1.1 官方免费版

    2020-06-19 / 408K

  • 内存扫把中文版下载V1.97绿色版

    2020-06-19 / 1.3M

网友评论

验证码:

请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

最新评论

已有人参与,点击查看更多精彩评论

关于CE安全网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2019-2029 cesafe.com 【CE安全网】 版权所有 蜀ICP备19039426号-2| 蜀ICP备19039426号-2

声明: 本站为非赢利性网站 不接受任何赞助和广告 所有软件和文章来自互联网 如有异议 请与本站联系 技术支持:ce安全网