1. 程式人生 > >詳細介紹快取的幾種方式

詳細介紹快取的幾種方式

對於Web前端而言,cache可以說是無處不在,通常是2個環節之間,就會引入一個cache做為提升整體效率的角色。例如A和B兩者之間的資料交換,為了提升整體的效率,引入角色C,而C被用於當做熱點資料的儲存,或者是某種中間處理的機制。

也就是我們常常說的“空間換時間”,犧牲一部分代價,來換取整體效率的提升。

那麼我們一起來看看前端當中,有那些比較關鍵的快取?它們又是怎樣協調工作的呢?我們一起來看看哈。

1. 域名轉為IP地址(域名伺服器DNS快取)

我們知道url其實只是一個別名,真實的伺服器請求地址,實際上是一個IP地址。獲得IP地址的方式,就是查詢DNS對映表。雖然這是一個非常簡單的查詢,但如果每次使用者訪問一個url都去查詢DNS一次,未免顯得太頻繁。DNS會告訴你,你別老是經常過來,萬一我掛了,我們就無法愉快地玩耍了。

各個瀏覽器的快取時間,會有一定的差別。而在chrome瀏覽器中檢視dns的快取時間的方式:chrome://net-internals/#dns

因此,瀏覽器一般會在本地會建立一個DNS快取,在一段比較長的時間裡,都是使用本地的快取對映。例如,在win7系統的cmd裡,可以通過“ipconfig /flushdns ”的方式來重新整理本地DNS。

優點:url對映為IP非常快。

成本:消耗一定的瀏覽器空間來儲存對映關係

2. 訪問伺服器,獲取靜態內容(地理位置分散式服務CDN)

有同學可能會說,這個CDN不是快取。其實,CDN的原則就是將離你很遠的東西,放在離你很近的地方,通過這種方式提高使用者的訪問速度。從這個角度,它也可以理解為犧牲空間成本換取了時間,本質上也帶有cache的嫌疑,我們權且當做一種特殊的cache吧

優點:解決使用者離伺服器太遠的時候,網路路由中跳來跳去的嚴重耗時。

成本:全國各地部署多套靜態儲存服務,管理成本比較高,釋出新檔案的時候,需要等待全國節點的更新等。

3. 瀏覽器本地快取(無網路互動型別)

在雅虎前端優化的14條原則中,其中一條就是儘量消滅請求,以達到降低伺服器壓力和提升使用者體驗的效果。靜態檔案,例如Js、html、css、圖片等內容,很多內容可以1次請求,然後未來就直接訪問本地,不再請求web伺服器。

常用的實現方法是通過Http協議頭中的expire和max-age來控制,這兩者的使用方法和區別,我這裡就不贅敘了哈。還有一種最近HTML5中很火的,則是localStorage,尤其在移動端也被做為一個強大的快取,甚至當做一種本地儲存來廣泛使用

優點:減少網路傳輸,加快頁面內容展示速度,提升使用者體驗。

成本:佔用客戶端的部分記憶體和磁碟,影響實時性。

4. 瀏覽器和web服務協議快取(有網路互動型別)

瀏覽器的本地快取是存在過期時間的,一旦過期,就必須重新向伺服器請求。這個時候,會有兩種情形:

(1)伺服器的檔案或者內容沒有更新,可以繼續使用瀏覽器本地快取。

(2)伺服器的檔案或者內容已經更新,需要重新請求,通過網路傳輸新的檔案或者內容。

這裡的協商方式也可以通過Http協議來控制,Last-Modified和Etag,這個時候請求伺服器,如果是內容沒有發生變更的情況,伺服器會返回304 Not Modified。這樣的話,就不需要每次訪問伺服器都通過網路傳輸一個比較大的檔案或者資料包,只要簡單的http應答就可以達到相同的請求檔案效果。

優點:減少頻繁的網路大資料包傳輸,節約頻寬,提升使用者體驗。

成本:增加了的伺服器處理的步驟,消耗更多的CPU資源。

5. 瀏覽器中間代理

上面的幾種cache機制,實際上都是非常常見。但是,在移動網際網路時代,流量昂貴是很多使用者心中的深深的痛。於是,又出現了一種新型的中間chache,也就是在瀏覽器和web伺服器再架設一箇中間代理。這個代理伺服器會幫助手機瀏覽器去請求web頁面,然後將web頁面進行處理和壓縮(例如壓縮檔案和圖片),使頁面變小,然後再傳輸給手機端的瀏覽器。

部分手機瀏覽器(例如chrome),號稱可以節省流量,實際上就是上述做法。但是,也分為兩種情況:

(1)使用者的網路和手機配置都比較差,因為頁面被壓縮變小,載入和傳輸速度變快,並且節約了流量。

(2)使用者的網路和手機配置都比較好,本身直連速度已經很快了,反而因為設定了中間代理,載入速度變慢,也可節約流量。

優點:節約使用者流量,大部分情況下提升了載入速度。

成本:需要架設中間代理伺服器,對各種檔案進行壓縮,有比較高的伺服器維護成本。

6. 預載入快取機制

這種載入方式也是主要流行在移動端,為了解決手機網速慢和瀏覽器載入效能的問題,瀏覽器會判斷頁面的關聯內容,進行“預載入”。也就是說,在使用者瀏覽A頁面的時候,就下載並且載入B頁面的內容。給使用者的體驗就是,B頁面一瞬間就出現了,中間沒有任何延遲的感覺,從而帶來更好的極佳的使用者體驗。

這種實現機制,往往由瀏覽器來實現,當然,手機頁面本身,也可以通過JS來自身實現。而這種機制也存在一些問題,瀏覽器需要預判使用者的瀏覽行為,在一些場景下,這個預判演算法本身不一定準確,如果不準確則帶來一定的流量、記憶體和系統資源的浪費。、

優點:給使用者帶來極佳的頁面展示體驗。

缺點:預判實現比較複雜,佔據一定的記憶體和手機系統資源,可能產生流量和資源浪費。

前端的chache當然不僅僅如此簡單,如果細緻到每一個小環節和組成部分,我們會發現實際上是無處不在的,例如瀏覽器的渲染行為、網路網絡卡的傳輸環節,小環節和小環節之間也有無數這種型別的cache角色。

這個就如同幾何分形學中的自相似性:從整體上看符合某種組成規律或者特性,同時,從區域性看,仍然符合某種組成的規律或者特性。

相關推薦

詳細介紹快取方式

對於Web前端而言,cache可以說是無處不在,通常是2個環節之間,就會引入一個cache做為提升整體效率的角色。例如A和B兩者之間的資料交換,為了提升整體的效率,引入角色C,而C被用於當做熱點資料的儲存,或者是某種中間處理的機制。 也就是我們常常說的“空間換時間”,犧牲一

程序間通訊的方式介紹及比較

程序間通訊 就是在不同程序之間傳播或交換資訊,那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是“公共場所”,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩個

小程式跳轉的方式詳細筆記

wx.navigateTo 用於保留當前頁面、跳轉到應用內的某個頁面,使用 wx.navigateBack 可以返回到原頁面。對於頁面不是特別多的小程式,通常推薦使用 wx.navigateTo 進行跳轉, 以便返回原頁面,以提高載入速度。當頁面特別多時,則不推薦使用。 w

Android中IPC的方式詳細分析與優缺點分析

Android程序間通訊(IPC:Inter-Process Communication)的幾種主要方式如下 1.使用Bundle   ----> 用於android四大元件間的程序間通訊 android的四大元件都可使用Bundle傳遞資料  所以如果要實現四大元

資料快取方式

引入快取可以提高效能,但是資料會存在兩份,一份在資料庫中,一份在快取中,如果更新其中任何一份會引起資料的不一致,資料的完整性被破壞了,因此,同步資料庫和快取的這兩份資料就非常重要。本文介紹常見的快取更新的同步策略。 預留快取Cache-aside   應用程式碼能夠手工

Linux入門學習,怎麼使用Vim編輯器編輯儲存檔案?以及檢視瀏覽檔案的方式介紹——(四)

引言:上期回顧(想要學習的童鞋可以點選看看) 上一章講述了在linux系統當中怎麼建立檔案以及對檔案的基本操作,這章主要是說檢視檔案的幾種方式,順便簡單簡單說下vim編輯器的使用。我們不管在使用什麼系

web中快取方式

看了構建高效能的web站點一書,對其中的集中web快取進行一個總結 1 應用程式實現的動態頁面快取 應用程式把動態檔案生成的html檔案快取到檔案伺服器,以後使用者請求動態檔案,直接從檔案伺服器載入對應的靜態快取的html檔案返回給使用者,這裡面主要節省了動態語言的執行時間

終止正在執行的子執行緒(一、方式介紹

最近開發的東西有涉及到執行緒的建立和釋放,由於對這一塊不是很熟悉,查閱很多資料,現記錄如下: 如何正確的終止正在執行的子執行緒       最近開發一些東西,執行緒數非常之多,當用戶輸入Ctrl+C的情形下,預設的訊號處理會把程式退出,這時有可能會有很多執行緒的資源

面試常客Handler詳細解析(更新UI的方式)(六)

一共有: UI主執行緒 activityd的runOnUiThread handler post handler sendMessage view post 下面將我自己已經驗證成功的程式碼貼出了,其實這些方法都是殊途同歸,都是使用了handler,封

Android中實現IPC的方式詳細分析及比較

1.使用Bundle   ----> 用於android四大元件間的程序間通訊android的四大元件都可使用Bundle傳遞資料  所以如果要實現四大元件間的程序間通訊 完全可以使用Bundle來實現 簡單方便  2.使用檔案共享  ---->用於單執行緒讀寫

Web專案中,清理瀏覽器快取方式

在B/S架構的專案中,訪問web專案時,往往需要清理瀏覽器的快取資料,js ,css 等等。 //方法1:在引用的js ,css ,圖片,等檔案的url 處加一個變數,生成一個隨機數字 <script type="text/javascript" src="<

瀏覽器performance工具介紹及記憶體問題表現與監控記憶體的方式

一.GC的目的 為了實現記憶體空間的良性迴圈,performance提供多種監控方式監控記憶體 分析記憶體相關資訊 當代碼出現問題的時候及時定位到出現問題的程式碼塊, 提高執行效率。 preforcemance使用步驟(以谷歌瀏覽器為例) 進入開發人員工具面板(F12)->點選preforcemance

Eclipse安裝svn插件的方式 轉帖....

如果 version name feature help sin 鏈接 exe 文件 Eclipse安裝svn插件的幾種方式 1.在線安裝: (1).點擊 Help --> Install New Software... (2).在彈出的窗口中點擊add按鈕,輸

解決瀏覽器跨域的方式

doc cor 求和 對象 跨域 http onf 從服務器 console 1、什麽是跨域問題 在頁面中使用js訪問其他網站的數據時,就會出現跨域問題,比如在網站中使用ajax請求其他網站的天氣、快遞或者其他數據接口時,以及hybrid app中請求數據,

前端跨域方式

div ner dev 修改 ati hash 標簽 nbsp 端口 跨域問題的直接原因是瀏覽器存在同源策略,瀏覽器同源指的是:兩個頁面的協議、端口和主機相同,則兩個頁面具有相同的源。IE下滿足協議、主機相同,就認為是同源。 想象一下,如果沒有同源策略,誰都可以修改你站點

Python 與 C/C++ 交互的方式

pythonpython作為一門腳本語言,其好處是語法簡單,很多東西都已經封裝好了,直接拿過來用就行,所以實現同樣一個功能,用Python寫要比用C/C++代碼量會少得多。但是優點也必然也伴隨著缺點(這是肯定的,不然還要其他語言幹嘛),python最被人詬病的一個地方可能就是其運行速度了。這這是大部分腳本語言

php中實現頁面跳轉的方式

腳本 timeout location clas replace asc idt lee 實現 親測,not復制粘貼 PHP中實現頁面跳轉有一下幾種方式,看了幾個人寫的不是很條理,自己整理一下 在PHP腳本代碼中實現 <?php header("locati

Java 修改編碼格式的方式

格式 text cnblogs 修改 .com pac 方式 src -1 1、工作空間 workspase Window→Preferences→General→Workspace→Text file encoding→other→UTF-8 2、項目編碼格式 右鍵項目

Oracle數據庫遷移的方式

備份與恢復 行遷移 target span spf 位置 server create 設備 面試: 一、exp/imp邏輯備份與恢復: 二、Storage存儲遷移: 將數據文件、控制文件、日誌文件、spfile掛到新機器上,然後在新機器上啟動數據庫。 三、利用data gu

C#打開SDE數據庫的方式總結

tex 用戶 ops 總結 param word editor conn tor 轉自謝燦軟件原文 C#打開SDE數據庫的幾種方式總結 1.通過指定連接屬性參數打開數據庫 /// <param name="server">數據庫服務器名&