大文檔首屏渲染方案的一些思考和嘗試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的渲染可能有一些做用,能夠把主線程讓給表格渲染。