天天看點

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

首屏啟動之痛

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

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

使用者從調用getIpByHostAsync接口大緻會經曆:

(1)記憶體緩存檢查

(2)ip合法性檢查

(3)異步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首屏啟動更快 -- httpdns持久化緩存方案

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

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

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

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

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