對於傳統的頁面模型來講,數據的拉取+渲染模型以下:android
在頁面的head部分,使用jsonp預拉取cgi資源,而後在資源加載完成以後,檢查預拉取的數據是否已經返回,若是已返回,則直接用該數據渲染(避免了先用緩存數據渲染再用cgi數據渲染致使的二次刷新),不然才用緩存數據渲染。web
對於上面的優化方式,咱們能夠用於獨立頁面的首屏數據渲染中,可是對於由手Q中一個webview內打開的新webview裏的H5頁面,是否有更好的方法呢?json
當咱們經過點擊操做,在webview內調用手Q的openUrl接口打開新的webview並加載頁面,新頁面對於咱們來講是可被預知的,也就是說咱們點擊打開新webview的時候,實際上是知道要打開的頁面是什麼。緩存
所以對於cgi預拉取的邏輯,咱們其實能夠提早到前一個webview點擊的操做時就發起。網絡
統計了一下手Q建立webview到開始請求頁面url之間的耗時,android端耗時大約在1.5-2秒之間。jsonp
所以其實咱們能夠利用這段時間,在點擊前一個webview的同時,讓新頁面的首屏cgi請求提早發起,在等待下一個webview打開並load頁面的期間,若是cgi請求已經返回,數據能夠暫存在前一個webview中,等新webview頁面資源ready以後,經過手Q的webview通訊接口mqq.addEventListener/mqq.dispatchEvent從上一個webview獲取數據並渲染。優化
因爲客戶端接口通訊速度比網絡通訊要快,所以可藉此減小首屏數據渲染的等待時間,另外也同時能夠改善二次渲染的問題:url