1. 程式人生 > >Android平臺5+ API提前生效,支持在plusready事件前調用

Android平臺5+ API提前生效,支持在plusready事件前調用

string window 應用 board 失敗 tom tar 定位 htm

ios上plus是一直存在的,不涉及等ready事件。但安卓上還是需要等plus ready。
在安卓環境中,通常情況下需要html頁面解析完成後才會讓5+ API生效,安卓的執行的順序為:

  1. 加載html頁面,loading
  2. 解析html頁面(解析title節點、下載script/link等節點引用的資源,如js/css文件)
  3. 觸發DOMContentLoaded事件
  4. 觸發plusready事件
    此文對執行順序有詳細描述:http://ask.dcloud.net.cn/article/571

這樣導致5+ API生效時間比較延後,通常采用以下代碼等待plus ready後再調用5+ API:

復制代碼document.addEventListener(‘plusready‘,function () {  
        // 在這裏調用5+ API  
},false);  

我們總是在不停追求性能優化,生效時間越早,我們可以把app的體驗做的更好。
在HBuilder7.5版本之後安卓版支持提前註入5+ API,可以在plusready事件觸發之前調用5+ API,操作方法是在頁面中添加以下節點:
,示例如下:

復制代碼<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8"/>  
        <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/>  
        <title>HTML5+ API</title>  
        <script src="html5plus://ready"></script>  
        <script type="text/javascript" charset="utf-8">  
// 這裏可以調用5+ API了,為了更好的兼容性,應該使用以下代碼進行判斷  
if(window.plus){  
    // 在這裏調用5+ API  
}else{// 兼容老版本的plusready事件  
    document.addEventListener(‘plusready‘,function () {  
        // 在這裏調用5+ API  
    },false);  
}  
        </script>  
    </head>  
    <body>  
Hello HTML5 plus.  
    </body>  
</html>  

註意

  1. 5+ API雖然可以提前生效,但為了不引發向下兼容問題,plusready事件並不會提前觸發,該事件仍然保持原來的觸發時機;
  2. 提前生效的Plus api,操作時需註意,此時DOMContentLoaded事件高概率未觸發,此時操作dom會失敗,操作dom也還是得等到DOMContentLoaded後;
  3. Android3.0及以上平臺才支持提前生效,Android2.*版本不支持此功能;

應用場景舉例

  • 定位
    很多app的頁面是根據位置來顯示內容的,如果在DOMContentLoaded後再請求位置,然後再提交服務器獲取該位置周邊的商家列表,這樣就會慢。而提前使用plus api獲取位置,就可以加速頁面顯示速度。尤其對於首頁就要拉周邊信息的app更重要。
  • 父子頁面加載
    如果頁面是父子webview布局,過去是父頁面在觸發plusready後再創建子頁面,導致整體頁面顯出出來比較慢。如果讓plus api提前生效,我們可以無需等待父頁面plusready就直接創建子頁面。
    另外,HBuilder在2017年起的版本,支持雙首頁,如果首頁是父子頁面,建議把這2個頁面都配到manifest裏形成雙首頁,此時原來的子頁面並不需要等父頁面的plus ready才創建。而非首頁的二級頁面,其實也不建議用父子頁面,而是使用nativeobj裏的原生view來做title,不用webview來做title。

應用場景還有很多,優化無極限,歡迎高手繼續研究。

Android平臺5+ API提前生效,支持在plusready事件前調用