你不知道的前端性能優(yōu)化 - 緩存優(yōu)化 (三)

你不知道的前端性能優(yōu)化 - 緩存優(yōu)化 (三)

前言:所有的優(yōu)化點(diǎn)都有其適用的條件藕溅,所有的優(yōu)化點(diǎn)都能夠量化看到效果欣范,具體項(xiàng)目具體分析巍耗,并不是每個(gè)項(xiàng)目都能適用這里的每個(gè)點(diǎn)锌介,望周知嗜诀。

存儲(chǔ)對(duì)象

我們常見的前端存儲(chǔ)有這些:localstoragecookie掏湾、sessionstorage裹虫、indexdb肿嘲。這里就不一一的闡述每個(gè)存儲(chǔ)的不同了融击。

那我們有這些存儲(chǔ)對(duì)象我們就可以好好的利用這些存儲(chǔ)對(duì)象。針對(duì)每個(gè)存儲(chǔ)的各自的特點(diǎn)雳窟,可以做一些非常好的優(yōu)化尊浪。

  1. 使用 localstorage 緩存常用的數(shù)據(jù) 現(xiàn)代化瀏覽器都支持 localStorage ,我們可以實(shí)現(xiàn)一個(gè)類似這樣的功能封救,當(dāng)我們?nèi)∫粋€(gè)數(shù)據(jù)的時(shí)候拇涤,先去localStorage 中尋找,沒有再向服務(wù)器發(fā)送請(qǐng)求誉结《焓浚夸張一點(diǎn),我們可以把圖片惩坑、js文件存儲(chǔ)到里面掉盅。看一個(gè)例子: [圖片上傳失敗...(image-1cd30b-1552222954830)]

    淘寶真是物盡所用以舒,所有儲(chǔ)存對(duì)象基本都用了趾痘。在 localStorage 存儲(chǔ)了大量的數(shù)據(jù),包含圖片蔓钟、icon等等永票。當(dāng)頁面第二次加載的時(shí)候就不用去重復(fù)請(qǐng)求后臺(tái)相應(yīng)的資源了。(localStorage存儲(chǔ)大約能存 4M )

  2. CDN域名不攜帶cookie cookie存儲(chǔ)能帶給后端滥沫,所以主要是用來鑒別客戶端的唯一性侣集,知道你是哪個(gè)用戶。所以 cookie 中的數(shù)據(jù)不能無意義兰绣,不能太大世分。 我們的CDN域名最好和主域名分開,這樣在請(qǐng)求靜態(tài)資源的時(shí)候就不會(huì)帶上這個(gè) cookie 了減少了請(qǐng)求頭的大小狭魂,減少了客戶所需的流量罚攀〉趁伲可能感覺微乎其微,但是你假設(shè)你的 cookie 是 1k斋泄, 一天有 1萬人訪問杯瞻,訪問靜態(tài)資源請(qǐng)求 2萬 此,那么你就會(huì)白白消耗 1萬K 的流量炫掐。

  3. 其余的存儲(chǔ)對(duì)象都可以在適當(dāng)?shù)膱?chǎng)景魁莉,適當(dāng)?shù)氖褂谩J褂玫臅r(shí)候要考慮兼容募胃,和最大儲(chǔ)存容量旗唁。用的好是跑車,用不好是拖拉機(jī)痹束。

PWA和 service worker

以下來自百度检疫。

PWA是一種理念,使用多種技術(shù)來增強(qiáng)web app的功能祷嘶,可以讓網(wǎng)站的體驗(yàn)變得更好屎媳,能夠模擬一些原生功能,比如通知推送论巍。在移動(dòng)端利用標(biāo)準(zhǔn)化框架烛谊,讓網(wǎng)頁應(yīng)用呈現(xiàn)和原生應(yīng)用相似的體驗(yàn)。

PWA不能包含原生OS相關(guān)代碼嘉汰。PWA仍然是網(wǎng)站丹禀,只是在緩存、通知鞋怀、后臺(tái)功能等方面表現(xiàn)更好双泪。

簡(jiǎn)單的來說 PWA 的概念提出,就是要 web app 更像手機(jī)里裝的 APP 一樣接箫。具有推送攒读,主屏圖標(biāo)和離線訪問等特性。

PWA的提出可以說是一個(gè)進(jìn)步辛友,你可以想想以后的web app將會(huì)和手機(jī)app一樣具有很多一致的功能薄扁,這種趨勢(shì)下去,web app會(huì)大量誕生废累。

這里只是提出這一個(gè)點(diǎn)邓梅,具體的適應(yīng)場(chǎng)景特別多,其中service worker對(duì)瀏覽器的版本要求高邑滨,小伙伴們可以在自己的web app中嘗試實(shí)現(xiàn)PWA中的概念日缨,沒有特別高的兼容性要求可以試試使用 service worker 真心不錯(cuò)的,最后再推薦一個(gè)檢測(cè)當(dāng)前網(wǎng)站對(duì) PWA 的支持度的谷歌插件 Lighthouse 掖看,目前支持最高的應(yīng)該是推特匣距。

真正的緩存

以上的內(nèi)容更多是瀏覽器的存儲(chǔ)對(duì)象和PWA面哥,真正不通過代碼的瀏覽器緩存,是通過http header中的cache-control來完成的毅待,瀏覽器接受到這個(gè)配置就會(huì)做相應(yīng)的事情尚卫。

先了解下304狀態(tài)碼:


304

cache-control的屬性(http 1.1)

  1. max-age 指定緩存的最大有效時(shí)間,時(shí)間之內(nèi)再次請(qǐng)求資源尸红,不去發(fā)送http請(qǐng)求

  2. s-maxage 指定public的緩存的最大有效時(shí)間吱涉,優(yōu)先級(jí)高于max-age,會(huì)發(fā)送請(qǐng)求,返回狀態(tài):304

  3. private 用戶所獨(dú)有的緩存外里,就是單一用戶瀏覽器的緩存怎爵。

  4. public 公共緩存,例如cdn的盅蝗,代理服務(wù)器的緩存鳖链。

  5. no-cache 指定緩存是否要發(fā)送http請(qǐng)求來詢問服務(wù)器當(dāng)前的緩存內(nèi)容是否還有效,搭配max-age=0使用风科,有這個(gè)屬性就會(huì)發(fā)送http請(qǐng)求詢問服務(wù)器撒轮。

  6. no-store 完全不會(huì)存儲(chǔ)

配合的屬性還有:

expires緩存的過期時(shí)間(http1.0的東西,沒有上面的cache-control優(yōu)先級(jí)高)

  • 協(xié)商緩存策略一:

last-modified(response header) :最后修改時(shí)間贼穆,標(biāo)識(shí)文件的最后修改時(shí)間

if-modified-since(request header):請(qǐng)求中帶上瀏覽器中標(biāo)識(shí)的最后修改時(shí)間,服務(wù)端會(huì)和文件真實(shí)的修改時(shí)間進(jìn)行匹配兰粉,匹配返回304故痊,不匹配重新返回文件內(nèi)容

  • 協(xié)防緩存策略二:

etag(response header):文件的hash

if-none-match(request header):請(qǐng)求中帶上瀏覽器中儲(chǔ)存的文件hash值,服務(wù)端會(huì)和文件真實(shí)的hash值進(jìn)行對(duì)比玖姑,成功返回304愕秫,不同重新返回文件內(nèi)容

以上兩個(gè)協(xié)商緩存都需要和cache-control一起使用

流程如下:


緩存流程

圖片來源:https://www.cnblogs.com/mq0036/p/7090635.html

總結(jié)以上幾點(diǎn):

  1. 我們可以使用瀏覽器儲(chǔ)存對(duì)象localstoragecookie焰络、sessionstorage戴甩、indexdb等,存儲(chǔ)相關(guān)的內(nèi)容

  2. web app的使用嘗試使用service worker闪彼,實(shí)現(xiàn)pwa的一些理念甜孤。

  3. 對(duì)于圖片等靜態(tài)資源,在我們的服務(wù)器上使用協(xié)商緩存策略畏腕。

其它篇幅傳送門:

你不知道的前端性能優(yōu)化 一 靜態(tài)資源優(yōu)化
你不知道的前端性能優(yōu)化 二 布局于樣式
你不知道的前端性能優(yōu)化 三 緩存優(yōu)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缴川,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子描馅,更是在濱河造成了極大的恐慌把夸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铭污,死亡現(xiàn)場(chǎng)離奇詭異恋日,居然都是意外死亡膀篮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門岂膳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來各拷,“玉大人,你說我怎么就攤上這事闷营】臼颍” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵傻盟,是天一觀的道長速蕊。 經(jīng)常有香客問我,道長娘赴,這世上最難降的妖魔是什么规哲? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诽表,結(jié)果婚禮上唉锌,老公的妹妹穿的比我還像新娘。我一直安慰自己竿奏,他們只是感情好袄简,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泛啸,像睡著了一般绿语。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上候址,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天吕粹,我揣著相機(jī)與錄音,去河邊找鬼岗仑。 笑死匹耕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荠雕。 我是一名探鬼主播稳其,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舞虱!你這毒婦竟也來了欢际?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤矾兜,失蹤者是張志新(化名)和其女友劉穎损趋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浑槽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蒋失,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桐玻。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡篙挽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镊靴,到底是詐尸還是另有隱情铣卡,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布偏竟,位于F島的核電站煮落,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏踊谋。R本人自食惡果不足惜蝉仇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殖蚕。 院中可真熱鬧轿衔,春花似錦、人聲如沸睦疫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笼痛。三九已至裙秋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缨伊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工进宝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刻坊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓党晋,卻偏偏與公主長得像谭胚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子未玻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355