浏览器加速新作法,Firefox 58将引入串流编译以及分层编译技术
Firefox 57使用了Quantum引擎后,速度已是Firefox 52的两倍,而 Mozilla表示 ,Firefox 58将加入串流编译以及分层编译技术,让网页程式执行速度更快。
Mozilla引用,曾在Google担任效能总监与Yahoo!首席效能官,现任于SpeedCurve的Steve Souders的观点表示,以前网页的效能瓶颈在于网路,但现今效能瓶颈却是在CPU,尤其是在主执行绪上,执行解析以及编译的工作。
因此Mozilla认为,要解决这个问题有两种想法,其一便是分担主执行绪的工作,其二是尽可能越早开始工作,就能让工作越早结束。对于主执行绪来说,处理Javascript负担较大,虽然解析的工作可以交给次执行绪,但是主执行绪编译的工作仍必须要等到解析结束,这过程需要一些时间,导致在执行时间的Javascript编译延迟时间较明显。
WebAssembly在于准备的动作简单很多,解码也比解析快速,而且可以同时在多执行绪汇整结果,这也是WebAssembly执行速度比Javascript快上许多的原因。
新的串流编译器要强化WebAssembly早工作早结束的特性。在之前,浏览器网路层在下载.wasm档案时,会将其先放进ArrayBuffer中,待ArrayBuffer满后才会丢给Web VM开始后续编译的工作,Mozilla认为,让编译器等待并非有效率的事,Firefox 58新的编译器能够下载一行程式码就编译一行,让下载与编译工作能够同时执行,另外,.wasm模组的程式码区块会被优先传输,资料部分则会被摆在后面,Mozilla表示,当资料区块占档案很大部分时,就能得到很大的效能优势。
而分层编译器则能让编译工作平行化,第一层编译器专做编译工作,而第二层编译器则会在第一层编译器开始工作后,开始以较慢的速度编译程式码,但是同时产生较多的最佳化程式码,当第一层编译器完成手上的工作,便会接手第二层编译器所输出的最佳化程式码,以更快的速度完成编译。
经Mozilla测试,分层编译器将比原本的编译器速度快10到15倍,应用串流编译以及分层编译两种技术后,桌面版本的Firefox将可以每秒编译30到60MB的WebAssembly程式码,也就是说程式码的编译速度将快过网路下载速度,程式码下载完程式码也就编译完了。