高效能的OkHttp

2021-09-19 09:41:25 字數 2389 閱讀 6101

預設情況下,okhttp並沒有將包含cache-control頭部檔案的響應進行快取。因此你的客戶端可能會浪費時間與頻寬去重複請求相同的資源,而不是簡單地讀取初次請求時候的快取副本。為了保證基於檔案系統的響應快取,應該配置乙個com.squareup.okhttp.cache例項並且把它傳遞給okhttpclientsetcache方法。在初始化該cache時,需要指定乙個file物件來指代檔案目錄以及最大的快取容量。響應會被快取寫入指定的資料夾,如果快取大小已經超過了資料夾的指定大小,會根據lru規則來進行篩選。下面是筆者的具體實踐:

// base directory recommended by 

// guard against null, which is possible according to

// and

// final @nullable file basedir = context.getcachedir();

if (basedir != null)

其中,我們建議的http_response_disk_cache_max_size值為10 * 1024 * 1024, 或者 10 mb。

stetho 是來自於facebook的乙個很有用的輔助庫,能夠允許開發者使用 chrome developer tools 來監測android應用。除了能夠允許開發者監測sqlite資料庫以及檢視層級之外,stetho還能輔助監測所有的來自okhttp的網路請求與響應。

這樣的自檢方法能夠保證伺服器返回恰當的帶有快取控制的響應,同時還能監測當快取資源存在時是否確定沒有請求被發出。如果要使用stetho,只需要簡單地來新增乙個stethointerceptor例項到網路***中:

okhttpclient.networkinterceptors().add(new stethointerceptor());
接下來,在應用執行之後,開啟chrome並且跳轉到chrome://inspect介面,既可以看到上述畫面。

筆者是直接使用了picasso進行網路的載入,以及使用retrofit來簡化請求構造以及響應解碼。預設情況下,這兩個庫是使用了okhttpclient進行底層的網路互動。以picasso的2.5.2版本的okhttp**********為例:

private static okhttpclient defaultokhttpclient()
retrofit有乙個很類似的工廠方法。在應用中,往往是常用的大型資源之一,picasso本身維護了乙個基於lru規則的快取系統,是直接在記憶體中的快取。

對於由客戶端提供的包含在user-agent標頭檔案中的詳細的本機資訊是往往用來日誌記錄與分析的重要**。預設情況下,okhttp中自帶的user-agent屬性會說明okhttp的版本。如果需要定製自己的user-agent資訊,可以通過建立乙個***並且替換以下這些值:

public final class useragentinterceptor implements interceptor 

@override

public response intercept(chain chain) throws ioexception

}

在構造傳入***的具體的user-agent的值時,我們使用了如下資訊:

最後三個值是gradle檔案中包含的版本資訊。如果你是使用的webview,則可以直接在webview中進行構造:

websettings settings = webview.getsettings();

settings.setuseragentstring(useragentheadervalue);

picasso specifies:

whereas retrofit specifies:

高效能的CSS

高效能的css 即 檔案載入更快,執行的速度更快,讓頁面盡快地展現在終端使用者的面前。1 使用高效地css選擇器 能被瀏覽器快速解析和匹配的css選擇器就是高效地選擇器。css選擇器的匹配原理和我們習慣的匹配過程是相反的,它是從右到左進行匹配的。高效的選擇器意味著瀏覽器匹配選擇器時更快速,匹配查詢次...

高效能mysql(一) 建立高效能索引

單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...

高效能mysql 樹 高效能mysql精要

1 explain 中 extra using index 表示覆蓋索引,sql優化中最好能使用覆蓋索引,否則 二級索引 需要回表查詢。所謂覆蓋索引,是指要查詢的列正好是索引,而條件也是這個索引之一 2 where 語句中 條件等於主鍵的 在核心索引層完成,條件等於非索引的,在服務層完成 3 讀索引...