閱讀433 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何讓App首屏啟動更快 -- httpdns持久化緩存方案

首屏啟動之痛

對於大部分app而言,首屏啟動是最為關鍵的場景之一,一旦出現阻塞將直接影響到用戶體驗,為此阿裏雲httpdns sdk推薦異步接口getIpByHostAsync來獲取ip,其大致過程如下:

_a

用戶從調用getIpByHostAsync接口大致會經曆:

  • 內存緩存檢查
  • ip合法性檢查
  • 異步httpdns請求

從流程中可以看出,由於httpdns請求是異步的,對於app首屏場景來說,httpdns可能正在解析途中,app在解析結果返回前會拿到空的ip,轉而去做Local DNS解析。

解決之道:持久化緩存

為了追求極致的性能體驗,盡量避免首屏啟動時的Local DNS解析,本文推出httpdns的持久化緩存方案,新增接口:
void setCachedIPEnabled(boolean enable);

初始化示例:
service = HttpDns.getService(getApplicationContext(), ACCOUNT_ID);
service.setCachedIPEnabled(true);

當setCachedIPEnabled(true)被調用時,httpdns解析記錄從持久化緩存同步到內存緩存。httpdns請求成功,解析記錄會同步更新到內存緩存和持久化緩存,其大致過程如下:

  • Step1 httpdns sdk初始化
  • Step2 持久化緩存開啟
  • Step3 持久化緩存記錄更新到內存緩存
  • Step4 調用getIpByHostAsync
  • Step5 檢查ip是否合法
  • Step6 拿到ip,發起http請求

采用持久化緩存前,APP啟動時發起業務請求時過程:

_b

采用持久化緩存後的過程如下:

_c

有了持久化緩存,app首屏啟動就能立刻拿到解析好的ip,同時,阿裏雲httpdns sdk內部的過期機製也能保證拿到ip的可靠性。此外,網絡切換發生後,SP(Server Provider,服務提供商)也可能發生變化,相同Host在不同SP下獲取的ip也會區別對待。httpdns sdk會結合當前網絡環境,通過SP和Host共同確定ip,讓app拿到的結果更加精準。

持久化緩存功能在Android v1.1.2 及以上版本添加,ios版本也將在近期上線,敬請期待!使用過程中如果遇到什麼問題,可以加入釘釘群進行交流,群號:11777313。

最後更新:2017-09-27 10:33:38

  上一篇:go  Java虛擬機管理的內存運行時數據區域解釋
  下一篇:go  阿裏雲機器學習係列直播--AutoEncoder實現語音降噪 附PAI深度學習完全使用教程【巨額福利-雲棲大會門票】