大文档首屏渲染方案的一些思考和尝试html
最近在处理一些优化方面的东西, 大文档渲染的优化方案。 这里简单记录分享一下。前端
周日简单开发了一下方案三node
将580行约2w6千字的文档,clientVars分为三块,分发给三个worker计算成html字符串。web
渲染的核心代码并无加入插件模块,只简单输出字符串。网络
方案 render字符串出来的时间为 ms多线程
优化前: 380 ms
方案三处理以后: 1200ms...post
尴尬的事情发生了,一顿操做猛于虎,一看战绩零杠五,居然是负优化。。。。性能
难受之余,分析了一下1200ms时间的构成,发现从main thread到worker之间postMessage的时间是整个负优化的来源,多达900ms到1000ms。优化
看了worker的资料:google
https://developers.google.com...
用Transferable Objects能大大提升postMessage的性能。
再试了一波,能把整个时间提高到780ms,仍然有400ms在的时间能够优化。为毛官方的 demo postMessage如此之快,我本身试的这么慢呢?
缘由是个人worker的js至关的复杂,体积很大,每一个worker启动的时候都须要去编译这些js,因此致使了这个负优化的产生。理论上咱们能够将各个plugin拆分为只render和其余的业务逻辑,能大大减小worker js的包体积。若是在包体积很差缩减的状况下,也能够采用预先初始化worker的方式来减小这个时间。这个方法能够在web容器化的方案里面使用.
在文档1100多行(约4w字)的时候,全文渲染的时间达到520ms,而此时多线程渲染依然保持在220ms左右.
对于超大的文档,多线程提高的结果是显著的,而小一些的文档500行左右,意义不大。对于Doc插sheet的渲染可能有一些做用,能够把主线程让给表格渲染。