swift 網路端的快取思想

2021-07-25 15:11:48 字數 1803 閱讀 9510

/*  網路請求資料的快取策略

*//* 簡單快取思想1 

->有網路情形:從網路中更新資料且進行快取; 

->無網路情形:直接從快取中取出; 

*//* 簡單快取思想2

(1) 什麼是「last-modified」?   請求資源檔案的最後修改時間

在瀏覽器第一次請求某個url時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在伺服器

端最後被修改的時間;  格式類似於 last-modifed: fri, 12 may 2006 18:53:33 gmt 

客戶端第二次請求此url時,根據http協議的規定,瀏覽器會想伺服器傳送 if-modified-since報頭,詢問該時間之後檔案是否被修改過; 

if-modified-since:fri, 12 may 2006 18:53:33 gmt 

如果伺服器端的資源沒有變化,則自動返回http304(not changed)狀態碼,內容為空,這樣就節省了傳輸資料量。當伺服器端**發生改變或者重啟

伺服器時,則重新發出資源,返回和第一次請求時類似。從而保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。

請求時的字段:  last-modified

響應時的字段:  if-modified-since

(2)什麼是"etag"?

http協議規定說明定義etag為"被請求變數的實體值". 另一種說法是,etag是乙個可以與web資源關聯的記號(token).伺服器單獨負責判斷記號是

什麼及其含義,並在http響應頭中將其傳送到客戶端,以下是伺服器端返回的格式: etag: "50b1c1d4f775c61:df3" ;

客戶端的查詢更新格式是這樣的:  if-none-match: w/"50b1c1d4f775c61:df3" 

如果etag沒改變,則返回狀態304且不返回其他資料;

請求時的字段: etag

響應時的字段: if-none-match

(3) 那麼last-modified 和 etags如何幫助提高效能?

把last-modified 和 etags請求的http報頭一起使用,這樣可利用客戶端嘚快取。因為伺服器首先產生last-modified/etags標記,伺服器稍後使用它

來判斷頁面是否已經被修改。本質上,客服端通過將該記號傳回伺服器,要求伺服器驗證其客服端的快取;

過程:  

(1) 客戶端請求乙個頁面(a)

(2) 伺服器返回頁面a, 並在給a家上乙個 last-midified/etag

(3) 客服端展現該頁面, 並將頁面連同last-modified/etag一起快取

(4) 客戶再次請求頁面a, 並將上次請求時伺服器返回的last-modified/etag一起傳遞給伺服器。

(5) 伺服器檢查該last-modified或etag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回狀態碼304以及空的響應體;

兩種思想結合:

1. 沒有網路的情形,只瀏覽本地的快取;

2. 有網路時,校對last-modified 或者 etag, 如果一致,表示沒有修改,那麼使用快取;

有網路時,不過不一致,那麼伺服器下發新資料;

上述是將的快取使用策略

下面該講述 快取命中機制  以及命中概率, 依舊快取清除機制(快取總會滿,所以需要按某個機制進行快取的清除)

快取機制:

用來改善應用所表現出的效能。

(1) 提供離線使用功能

(2)優化應用,用容量換取時間(比如記憶體中儲存,儲存訪問的資料,減少使用者流量)

*/

快取 網路中的快取。

網路中的快取位於客戶端和服務端之間,或響應客戶端的網路請求,從而對重複的請求返回快取中的資料資源。同時,接受服務端的請求,更新快取中的內容。web 幾乎是伴隨著網際網路誕生的,常用的web 分為正向 反向 和透明 web 是將web 作為快取的一種技術。一般情況下,web 預設說的是正向 如下圖所示...

網路快取的邏輯

網路快取很多方式都可以實現,有時候,可以將快取寫在本地檔案中,以md5 url 為檔名,以json為檔案內容儲存,如果快取寫在檔案中,先找檔案md5 url 存不存在,如果存在,說明有快取.今天不用這一種 因為我們快取的資料並不大 新建乙個工具類cacheutils 原則 以url 引數為key,以...

快取思想在演算法設計中的應用

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...