你不知道的前端性能优化 - 缓存优化 (三)

你不知道的前端性能优化 - 缓存优化 (三)

前言:所有的优化点都有其适用的条件,所有的优化点都能够量化看到效果,具体项目具体分析,并不是每个项目都能适用这里的每个点,望周知。

存储对象

我们常见的前端存储有这些:localstoragecookiesessionstorageindexdb。这里就不一一的阐述每个存储的不同了。

那我们有这些存储对象我们就可以好好的利用这些存储对象。针对每个存储的各自的特点,可以做一些非常好的优化。

  1. 使用 localstorage 缓存常用的数据 现代化浏览器都支持 localStorage ,我们可以实现一个类似这样的功能,当我们取一个数据的时候,先去localStorage 中寻找,没有再向服务器发送请求。夸张一点,我们可以把图片、js文件存储到里面。看一个例子: [图片上传失败...(image-1cd30b-1552222954830)]

    淘宝真是物尽所用,所有储存对象基本都用了。在 localStorage 存储了大量的数据,包含图片、icon等等。当页面第二次加载的时候就不用去重复请求后台相应的资源了。(localStorage存储大约能存 4M )

  2. CDN域名不携带cookie cookie存储能带给后端,所以主要是用来鉴别客户端的唯一性,知道你是哪个用户。所以 cookie 中的数据不能无意义,不能太大。 我们的CDN域名最好和主域名分开,这样在请求静态资源的时候就不会带上这个 cookie 了减少了请求头的大小,减少了客户所需的流量。可能感觉微乎其微,但是你假设你的 cookie 是 1k, 一天有 1万人访问,访问静态资源请求 2万 此,那么你就会白白消耗 1万K 的流量。

  3. 其余的存储对象都可以在适当的场景,适当的使用。使用的时候要考虑兼容,和最大储存容量。用的好是跑车,用不好是拖拉机。

PWA和 service worker

以下来自百度。

PWA是一种理念,使用多种技术来增强web app的功能,可以让网站的体验变得更好,能够模拟一些原生功能,比如通知推送。在移动端利用标准化框架,让网页应用呈现和原生应用相似的体验。

PWA不能包含原生OS相关代码。PWA仍然是网站,只是在缓存、通知、后台功能等方面表现更好。

简单的来说 PWA 的概念提出,就是要 web app 更像手机里装的 APP 一样。具有推送,主屏图标和离线访问等特性。

PWA的提出可以说是一个进步,你可以想想以后的web app将会和手机app一样具有很多一致的功能,这种趋势下去,web app会大量诞生。

这里只是提出这一个点,具体的适应场景特别多,其中service worker对浏览器的版本要求高,小伙伴们可以在自己的web app中尝试实现PWA中的概念,没有特别高的兼容性要求可以试试使用 service worker 真心不错的,最后再推荐一个检测当前网站对 PWA 的支持度的谷歌插件 Lighthouse ,目前支持最高的应该是推特

真正的缓存

以上的内容更多是浏览器的存储对象和PWA,真正不通过代码的浏览器缓存,是通过http header中的cache-control来完成的,浏览器接受到这个配置就会做相应的事情。

先了解下304状态码:


304

cache-control的属性(http 1.1)

  1. max-age 指定缓存的最大有效时间,时间之内再次请求资源,不去发送http请求

  2. s-maxage 指定public的缓存的最大有效时间,优先级高于max-age,会发送请求,返回状态:304

  3. private 用户所独有的缓存,就是单一用户浏览器的缓存。

  4. public 公共缓存,例如cdn的,代理服务器的缓存。

  5. no-cache 指定缓存是否要发送http请求来询问服务器当前的缓存内容是否还有效,搭配max-age=0使用,有这个属性就会发送http请求询问服务器。

  6. no-store 完全不会存储

配合的属性还有:

expires缓存的过期时间(http1.0的东西,没有上面的cache-control优先级高)

  • 协商缓存策略一:

last-modified(response header) :最后修改时间,标识文件的最后修改时间

if-modified-since(request header):请求中带上浏览器中标识的最后修改时间,服务端会和文件真实的修改时间进行匹配,匹配返回304,不匹配重新返回文件内容

  • 协防缓存策略二:

etag(response header):文件的hash

if-none-match(request header):请求中带上浏览器中储存的文件hash值,服务端会和文件真实的hash值进行对比,成功返回304,不同重新返回文件内容

以上两个协商缓存都需要和cache-control一起使用

流程如下:


缓存流程

图片来源:https://www.cnblogs.com/mq0036/p/7090635.html

总结以上几点:

  1. 我们可以使用浏览器储存对象localstoragecookiesessionstorageindexdb等,存储相关的内容

  2. web app的使用尝试使用service worker,实现pwa的一些理念。

  3. 对于图片等静态资源,在我们的服务器上使用协商缓存策略。

其它篇幅传送门:

你不知道的前端性能优化 一 静态资源优化
你不知道的前端性能优化 二 布局于样式
你不知道的前端性能优化 三 缓存优化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354