移動產品基礎模塊設計規範之應用緩存

移動產品基礎模塊設計規範之應用緩存

來自專欄 鄭幾塊

我們的產品在 1.3 的時候有了較大的調整,包括 UI、功能等方面,當然類似緩存這樣的基礎能力也是不可或缺的。下面帶大家一起了解下緩存相關的知識和應用。

一 什麼是應用緩存

緩存就是數據交換的緩衝區(稱作Cache),當某一設備要讀取數據時,會首先從緩存中查找需要的數據,如果找到了則直接執行,找不到的話則從內存中找。由於緩存的運行速度比內存快得多,故緩存的作用就是幫助硬體更快地運行。

APP 中顯示的數據除了從伺服器獲取,還有一個數據來源就是本地資料庫(緩存),它給我們的設計增加了很多豐富性。

二 緩存工作原理

緩存的工作原理是當CPU要讀取一個數據時,首先從 CPU 緩存中查找,找到就立即讀取並送給CPU處理;沒有找到,就從速率相對較慢的內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。正是這樣的讀取機制使CPU讀取緩存的命中率非常高,也就是說 CPU下 一次要讀取的數據90%都在 CPU 緩存中,只有大約10%需要從內存讀取。這大大節省了CPU 直接讀取內存的時間,也使 CPU 讀取數據時基本無需等待。總的來說,CPU 讀取數據的順序是先緩存後內存。

RAM 和 ROM 相對的,RAM 是掉電以後,其中的信息就消失那一種,ROM 在掉電以後信息也不會消失那一種。RAM 又分兩種,一種是靜態RAM,SRAM;一種是動態 RAM,DRAM。前者的存儲速率要比後者快得多,使用的內存一般都是動態 RAM。為了增加系統的速率,把緩存擴大就行了,擴的越大,緩存的數據越多,系統就越快了,緩存通常都是靜態RAM,速率是非常的快, 但是靜態 RAM 集成度低, 價格高,由此可見,擴大靜態 RAM 作為緩存是一個非常愚蠢的行為,但是為了提高系統的性能和速率,必須要擴大緩存, 這樣就有了一個折中的方法,不擴大原來的靜態RAM緩存,而是增加一些高速動態 RAM 做為緩存, 這些高速動態 RAM 速率要比常規動態 RAM 快,但比原來的靜態 RAM 緩存慢, 把原來的靜態 RAM 緩存叫一級緩存,而把後來增加的動態RAM叫二級緩存。

二 緩存存在的意義

緩存工作的原則,就是「引用的局部性」,這可以分為時間局部性和空間局部性。空間局部性是指 CPU 在某一時刻需要某個數據,那麼很可能下一步就需要其附近的數據;時間局部性是指當某個數據被訪問過一次之後,過不了多久時間就會被再一次訪問。對於應用程序而言,不管是指令流還是數據流都會出現引用的局部性現象。

從程序代碼上來考慮,設計者通常也會盡量避免出現程序的跳躍和分支,讓 CPU 可以不中斷地處理大塊連續數據。遊戲、模擬和多媒體處理程序通常都是這方面的代表,以小段代碼連續處理大塊數據。不過在辦公運用程序中,情況就不一樣了。改動字體,改變格式,保存文檔,都需要程序代碼不同部分起作用,而用到的指令通常都不會在一個連續的區域中。於是 CPU 就不得不在內存中不斷跳來跳去尋找需要的代碼。這也就意味著對於辦公程序而言,需要較大的緩存來讀入大多數經常使用的代碼,把它們放在一個連續的區域中。如果緩存不夠,就需要緩存中的數據,而如果緩存足夠大的話,所有的代碼都可以放入,也就可以獲得最高的效率。同理,高端的數據應用以及遊戲應用則需要更高容量的緩存。

簡單來說,緩存的意義主要有:

1. 告知用戶產品結構和信息,不會讓用戶直接看到異常,增強用戶體驗;

2. 部分減輕用戶請求對伺服器的壓力;

3. 提示用戶,告知用戶網路情況,使用緩存的情況多出現在網路狀況不好或者無網的情況

三 緩存處理的方式

自己對比了幾家牛逼公司的產品,在這裡不一一列舉了。當然這麼細節的東西,他們或許就不是很在意吧~(我自己想的~)

教大家一個檢測的方式,先在有網的情況下瀏覽一段時間 App,之後關閉網路,且殺死應用進程,然後再打開應用。你就能觀察這個應用的緩存了,做的好不好,自己可以嘗試下咯~

就產品而言,在應用中使用緩存的方式主要有幾種:

1. 在無網路或者網路出錯時,優先展示本地緩存數據,之後自動刷新界面,向用戶展示非模態提示,文案「網路錯誤或無鏈接…」,或者「您的網路不給力…」等;也有可能會在緩存到的位置增加提示。這種方式是目前使用較多的。

推薦產品截圖-網易

2. 在無網路或者網路出錯時,沒有緩存數據,只顯示本地包中的元素,且向用戶展示非模態提示,文案「網路錯誤或無鏈接…」,或者「您的網路不給力…」等。

推薦產品截圖-簡書

3. 在無網路或者網路出錯時,優先自動刷新界面,且向用戶展示提示,文案「網路錯誤或無鏈接…」,或者「您的網路不給力…」等。之後展示本地緩存數據。這種方式和第一種的流程不太一樣,在網路狀況好轉的時候,應用會自動刷新且請求新數據,替換較早的緩存數據。

就目前來說,第二種方式用的較多,產品上做的細緻的,大多會使用第一種方式。

大家可以多看看其他產品哦~

四 緩存的深度

再來和大家聊聊緩存的深度。

一般——當然也是我自己觀察的——應用會有兩層的緩存深度,也就是應用主 Tab 以及主 Tab 中內容點擊後的一級內容緩存。主要有:

主界面緩存。前面提到了,主界面緩存就是應用中的 Tab 對應的界面。當用戶瀏覽到對應界面的位置,應用就會緩存對應的數據。包括的數據可能有圖片、文字、動畫等。

主界面中的內容點擊後的緩存。顧名思義,點擊列表中的內容查看詳情,點擊評論 icon 到評論列表,點擊用戶頭像跳轉到用戶 Profile,等等,也會有可能存在緩存。

當然,兩級緩存不是絕對的,也有可能出現三級緩存。但對應的,隨著緩存深度的增加,對應用的影響也會增加。同時,對用戶的影響也有可能增大;用戶有可能因應用佔用設備空間太大而決定刪掉應用。

需要注意的是,如果應用中採用的 webview 的方式,內嵌 H5 頁面。在無網路或者網路出錯時,H5 頁面的內容是無法獲取的。大家可以在無網路的情況下,點擊微信中發現「購物」或「遊戲」cell,觀察下。

推薦產品截圖-微信

五 當網路變正常時

這時候,應用也會有很多方式處理設備緩存和新數據之間的關係。上文中,我提到了一些,大家也可以在實際的觀察中多多總結,並且應用的自己的產品中。

轉載請獲得授權!


推薦閱讀:

什麼是需求分析
從碎片化時間的利用,到內容生態的設計(上)
如何有效增長用戶,AB測試在產品中發揮的6個關鍵點
商業的本質這書到底說了啥?文(值)長(得)慎(一)入(讀)
產品經理入門

TAG:移動應用 | 產品設計 | 緩存 |