
Mozilla修复Firefox执行Vue.js程序所存在的效能问题,官方提到,他们发现当程序从Vue 2更新到Vue 3时,在Firefox上执行会出现一些效能问题。 Firefox已经对此调整完毕,会在9月底发布的118版本解决这项问题。
Vue.js是一个JavaScript框架,可用于构建用户界面和单页式应用程序。 而造成Firefox执行Vue.js出现性能问题的原因,在于Vue 2与Vue 3在拦截和监听对象属性时的读写操作不同,从ECMAScript 5版本开始,JavaScript提供了getter和setter这两个功能,让开发者可以在读取和设置对象属性时自定义操作,也就是开发者在存取对象属性时,能够插入自己的逻辑操作。
不过到了ECMAScript 6(ES2015),这个版本的JavaScript加入了Proxy对象,供开发者可以自定义像是查询、赋值和列举等基本操作的行为。 因为浏览器支持限制,Vue 2主要使用getter和setter来实施响应式系统,但到了Vue 3便开始用Proxy来处理响应式对象,因为Proxy提供更高精细度的控制与效能优势,而getter和setter则被用于处理ref,这项新功能在较新版本的浏览器才提供支持。
而Vue 2与Vue 3的对象操作行为转换,官方从Speedometer 3上发现Firefox存在性能问题。 Speedometer是一款用于测试网页浏览器性能的基准测试工具,可以通过模拟用户在各种工作负载上的互动,测量网页应用程序的响应性。 而Speedometer 3则是由Apple、Google和Mozilla共同合作开发。
Mozilla提到,由于Proxy的设计非常通用,因此很难进行优化,在Proxy刚加入时,处理Proxy的效能并非考量重点,最初的实作主要还是考虑正确性。 而在Speedometer 3测试中发现,部分Proxy被大量的使用,因而成为效能关键,官方决定在JIT时优化这些Proxy,以加速Proxy的处理效率,而这将能够使Vue.js的响应性变得更好,同时其他相关工作负载,预期也会有效能上的提升。