移動(dòng)產(chǎn)品基礎(chǔ)模塊設(shè)計(jì)規(guī)范之應(yīng)用緩存

1 評(píng)論 10943 瀏覽 79 收藏 10 分鐘

我們的產(chǎn)品在 1.3 的時(shí)候有了較大的調(diào)整,包括 UI、功能等方面,當(dāng)然類似緩存這樣的基礎(chǔ)能力也是不可或缺的。下面帶大家一起了解下緩存相關(guān)的知識(shí)和應(yīng)用。

一 什么是應(yīng)用緩存

緩存就是數(shù)據(jù)交換的緩沖區(qū)(稱作Cache),當(dāng)某一設(shè)備要讀取數(shù)據(jù)時(shí),會(huì)首先從緩存中查找需要的數(shù)據(jù),如果找到了則直接執(zhí)行,找不到的話則從內(nèi)存中找。由于緩存的運(yùn)行速度比內(nèi)存快得多,故緩存的作用就是幫助硬件更快地運(yùn)行。

APP 中顯示的數(shù)據(jù)除了從服務(wù)器獲取,還有一個(gè)數(shù)據(jù)來(lái)源就是本地?cái)?shù)據(jù)庫(kù)(緩存),它給我們的設(shè)計(jì)增加了很多豐富性。

二 緩存工作原理

緩存的工作原理是當(dāng)CPU要讀取一個(gè)數(shù)據(jù)時(shí),首先從 CPU 緩存中查找,找到就立即讀取并送給CPU處理;沒(méi)有找到,就從速率相對(duì)較慢的內(nèi)存中讀取并送給CPU處理,同時(shí)把這個(gè)數(shù)據(jù)所在的數(shù)據(jù)塊調(diào)入緩存中,可以使得以后對(duì)整塊數(shù)據(jù)的讀取都從緩存中進(jìn)行,不必再調(diào)用內(nèi)存。正是這樣的讀取機(jī)制使CPU讀取緩存的命中率非常高,也就是說(shuō) CPU下 一次要讀取的數(shù)據(jù)90%都在 CPU 緩存中,只有大約10%需要從內(nèi)存讀取。這大大節(jié)省了CPU 直接讀取內(nèi)存的時(shí)間,也使 CPU 讀取數(shù)據(jù)時(shí)基本無(wú)需等待??偟膩?lái)說(shuō),CPU 讀取數(shù)據(jù)的順序是先緩存后內(nèi)存。

RAM 和 ROM 相對(duì)的,RAM 是掉電以后,其中的信息就消失那一種,ROM 在掉電以后信息也不會(huì)消失那一種。RAM 又分兩種,一種是靜態(tài)RAM,SRAM;一種是動(dòng)態(tài) RAM,DRAM。前者的存儲(chǔ)速率要比后者快得多,使用的內(nèi)存一般都是動(dòng)態(tài) RAM。為了增加系統(tǒng)的速率,把緩存擴(kuò)大就行了,擴(kuò)的越大,緩存的數(shù)據(jù)越多,系統(tǒng)就越快了,緩存通常都是靜態(tài)RAM,速率是非常的快, 但是靜態(tài) RAM 集成度低, 價(jià)格高,由此可見(jiàn),擴(kuò)大靜態(tài) RAM 作為緩存是一個(gè)非常愚蠢的行為,但是為了提高系統(tǒng)的性能和速率,必須要擴(kuò)大緩存, 這樣就有了一個(gè)折中的方法,不擴(kuò)大原來(lái)的靜態(tài)RAM緩存,而是增加一些高速動(dòng)態(tài) RAM 做為緩存, 這些高速動(dòng)態(tài) RAM 速率要比常規(guī)動(dòng)態(tài) RAM 快,但比原來(lái)的靜態(tài) RAM 緩存慢, 把原來(lái)的靜態(tài) RAM 緩存叫一級(jí)緩存,而把后來(lái)增加的動(dòng)態(tài)RAM叫二級(jí)緩存。

二 緩存存在的意義

緩存工作的原則,就是“引用的局部性”,這可以分為時(shí)間局部性和空間局部性。空間局部性是指 CPU 在某一時(shí)刻需要某個(gè)數(shù)據(jù),那么很可能下一步就需要其附近的數(shù)據(jù);時(shí)間局部性是指當(dāng)某個(gè)數(shù)據(jù)被訪問(wèn)過(guò)一次之后,過(guò)不了多久時(shí)間就會(huì)被再一次訪問(wèn)。對(duì)于應(yīng)用程序而言,不管是指令流還是數(shù)據(jù)流都會(huì)出現(xiàn)引用的局部性現(xiàn)象。

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

簡(jiǎn)單來(lái)說(shuō),緩存的意義主要有:

1. 告知用戶產(chǎn)品結(jié)構(gòu)和信息,不會(huì)讓用戶直接看到異常,增強(qiáng)用戶體驗(yàn);

2. 部分減輕用戶請(qǐng)求對(duì)服務(wù)器的壓力;

3. 提示用戶,告知用戶網(wǎng)絡(luò)情況,使用緩存的情況多出現(xiàn)在網(wǎng)絡(luò)狀況不好或者無(wú)網(wǎng)的情況

三 緩存處理的方式

自己對(duì)比了幾家牛逼公司的產(chǎn)品,在這里不一一列舉了。當(dāng)然這么細(xì)節(jié)的東西,他們或許就不是很在意吧~(我自己想的~)

教大家一個(gè)檢測(cè)的方式,先在有網(wǎng)的情況下瀏覽一段時(shí)間 App,之后關(guān)閉網(wǎng)絡(luò),且殺死應(yīng)用進(jìn)程,然后再打開應(yīng)用。你就能觀察這個(gè)應(yīng)用的緩存了,做的好不好,自己可以嘗試下咯~

就產(chǎn)品而言,在應(yīng)用中使用緩存的方式主要有幾種:

1. 在無(wú)網(wǎng)絡(luò)或者網(wǎng)絡(luò)出錯(cuò)時(shí),優(yōu)先展示本地緩存數(shù)據(jù),之后自動(dòng)刷新界面,向用戶展示非模態(tài)提示,文案“網(wǎng)絡(luò)錯(cuò)誤或無(wú)鏈接…”,或者“您的網(wǎng)絡(luò)不給力…”等;也有可能會(huì)在緩存到的位置增加提示。這種方式是目前使用較多的。
IMG_9420
IMG_9421

推薦產(chǎn)品截圖-網(wǎng)易

2. 在無(wú)網(wǎng)絡(luò)或者網(wǎng)絡(luò)出錯(cuò)時(shí),沒(méi)有緩存數(shù)據(jù),只顯示本地包中的元素,且向用戶展示非模態(tài)提示,文案“網(wǎng)絡(luò)錯(cuò)誤或無(wú)鏈接…”,或者“您的網(wǎng)絡(luò)不給力…”等。
IMG_9424

IMG_9422

推薦產(chǎn)品截圖-簡(jiǎn)書

3. 在無(wú)網(wǎng)絡(luò)或者網(wǎng)絡(luò)出錯(cuò)時(shí),優(yōu)先自動(dòng)刷新界面,且向用戶展示提示,文案“網(wǎng)絡(luò)錯(cuò)誤或無(wú)鏈接…”,或者“您的網(wǎng)絡(luò)不給力…”等。之后展示本地緩存數(shù)據(jù)。這種方式和第一種的流程不太一樣,在網(wǎng)絡(luò)狀況好轉(zhuǎn)的時(shí)候,應(yīng)用會(huì)自動(dòng)刷新且請(qǐng)求新數(shù)據(jù),替換較早的緩存數(shù)據(jù)。

就目前來(lái)說(shuō),第二種方式用的較多,產(chǎn)品上做的細(xì)致的,大多會(huì)使用第一種方式。

大家可以多看看其他產(chǎn)品哦~

四 緩存的深度

再來(lái)和大家聊聊緩存的深度。

一般——當(dāng)然也是我自己觀察的——應(yīng)用會(huì)有兩層的緩存深度,也就是應(yīng)用主 Tab 以及主 Tab 中內(nèi)容點(diǎn)擊后的一級(jí)內(nèi)容緩存。主要有:

主界面緩存。前面提到了,主界面緩存就是應(yīng)用中的 Tab 對(duì)應(yīng)的界面。當(dāng)用戶瀏覽到對(duì)應(yīng)界面的位置,應(yīng)用就會(huì)緩存對(duì)應(yīng)的數(shù)據(jù)。包括的數(shù)據(jù)可能有圖片、文字、動(dòng)畫等。

主界面中的內(nèi)容點(diǎn)擊后的緩存。顧名思義,點(diǎn)擊列表中的內(nèi)容查看詳情,點(diǎn)擊評(píng)論 icon 到評(píng)論列表,點(diǎn)擊用戶頭像跳轉(zhuǎn)到用戶 Profile,等等,也會(huì)有可能存在緩存。

當(dāng)然,兩級(jí)緩存不是絕對(duì)的,也有可能出現(xiàn)三級(jí)緩存。但對(duì)應(yīng)的,隨著緩存深度的增加,對(duì)應(yīng)用的影響也會(huì)增加。同時(shí),對(duì)用戶的影響也有可能增大;用戶有可能因應(yīng)用占用設(shè)備空間太大而決定刪掉應(yīng)用。

需要注意的是,如果應(yīng)用中采用的 webview 的方式,內(nèi)嵌 H5 頁(yè)面。在無(wú)網(wǎng)絡(luò)或者網(wǎng)絡(luò)出錯(cuò)時(shí),H5 頁(yè)面的內(nèi)容是無(wú)法獲取的。大家可以在無(wú)網(wǎng)絡(luò)的情況下,點(diǎn)擊微信中發(fā)現(xiàn)“購(gòu)物”或“游戲”cell,觀察下。

IMG_9425

推薦產(chǎn)品截圖-微信

五 當(dāng)網(wǎng)絡(luò)變正常時(shí)

這時(shí)候,應(yīng)用也會(huì)有很多方式處理設(shè)備緩存和新數(shù)據(jù)之間的關(guān)系。上文中,我提到了一些,大家也可以在實(shí)際的觀察中多多總結(jié),并且應(yīng)用的自己的產(chǎn)品中。

本文由人人都是產(chǎn)品經(jīng)理專欄作家 @鄭幾塊 授權(quán)發(fā)布于人人都是產(chǎn)品經(jīng)理?。未經(jīng)許可,禁止轉(zhuǎn)載。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 您好,能否告知我您的QQ或其他聯(lián)系方式?有些緩存的問(wèn)題,想要咨詢您的。謝謝。

    回復(fù)