預設情況下,okhttp並沒有將包含cache-control
頭部檔案的響應進行快取。因此你的客戶端可能會浪費時間與頻寬去重複請求相同的資源,而不是簡單地讀取初次請求時候的快取副本。為了保證基於檔案系統的響應快取,應該配置乙個com.squareup.okhttp.cache
例項並且把它傳遞給okhttpclient
的setcache
方法。在初始化該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資訊,可以通過建立乙個***並且替換以下這些值:
在構造傳入***的具體的user-agent的值時,我們使用了如下資訊:public final class useragentinterceptor implements interceptor
@override
public response intercept(chain chain) throws ioexception
}
最後三個值是gradle檔案中包含的版本資訊。如果你是使用的webview,則可以直接在webview中進行構造:
picasso specifies:websettings settings = webview.getsettings();
settings.setuseragentstring(useragentheadervalue);
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 讀索引...