1. 程式人生 > >如何讓App首屏啟動更快 -- httpdns持久化快取方案

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

摘要: httpdns作為解決域名劫持,排程不精準問題的一劑良藥,很大程度上改善了app的使用者體驗。為了追求更加極致的效能體驗,本文推出httpdns持久化快取方案,讓app首屏啟動更快!

首屏啟動之痛

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

圖片描述

使用者從呼叫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啟動時發起業務請求時過程:

圖片描述

採用持久化快取後的過程如下:

圖片描述

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

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