脸书与Chrome合作加入实验性API,改进JavaScript调度效率

由于脸书应用程序的需要,与Google合作在Chrome浏览器加入isInputPending API,这是第一个将中断概念用于网页使用者输入的API,让开发者可以呼叫该API,调度网页上的JavaScript工作,改善伫列延迟,让使用者体验更顺畅,这个实验性的API将在Chrome 74中开始提供。
浏览器上存在快速载入页面和快速回应事件的两难,当网站需要使用JavaScript程式码,其快速载入页面的方法,便是不被中断的执行完整个程式码区块,但是这样会让页面无法即时回应使用者的输入,因为网页浏览器的JavaScript引擎通常为单执行绪,也就是说在页面同时只能执行一项操作,在页面载入的时候,当使用者点击了某些内容,则这些内容会被先储存在伫列中,待程式码区块执行完毕,才会处理伫列里的工作。
而脸书为了达到权衡回应使用者输入以及载入页面的效率,将JavaScript分解成数个小程式码区块,当页面载入时,会先执行一部分JavaScript,并将控制权交还给浏览器,待浏览器检查输入事件伫列,获取页面需要的资讯,接着才跳回来继续执行JavaScript。也就是说当页面想要更即时的回应使用者,JavaScript程式码区块就必须被切割的更小,但太多小区块的程式码,又会影响页面载入时间。
为了彻底解决这个必须在两者间权衡的难题,因此脸书提出了一个实验性API提案,与Chrome团队进行合作,在Chrome 74中加入isInputPending API试用版本,提供开发人员更灵活地调度JavaScript工作的手段。开发者可以在执行JavaScript工作的时候,使用isInputPending来决定是否要将控制权交还给浏览器,脸书提到,只要使用得当,isInputPending可以在几乎不影响效能的情况下,完全消除快速载入和快速回应事件之间的权衡难题。
当浏览器有需要处理的输入事件,则isInputPending()会回传true,这个函式在不输入任何参数的情况下,将检查所有类型的事件,也可以手动指定检查的事件,以个别检查鼠标游标、滚轮、触控或是DOM UI等事件。
脸书表示,新加入的isInputPending API代表了脸书开发新网页标准的方法,并对开源网页浏览器进行贡献,这个API还会被整合到React的并行模式中,让开发者得以开箱即用,接下来脸书会继续与Chrome合作其他的排程API。
