• 0
  • 0
分享
  • 前端性能优化:浏览器的2种缓存方式要弄清——软件测试圈
  • 曼倩诙谐 2023-04-06 13:29:43 字数 1198 阅读 1357 收藏 0

  在前端性能优化中,最重要的就是缓存,使用缓存可以极大的提升浏览器的响应速率。

  什么是缓存呢?

  当我们第一次访问某个网站时,浏览器会把网站中的图片等资源存储在电脑中,以备后续使用,第二次访问该网站时,浏览器直接访问缓存中的数据,从而达到提高浏览器的响应效率,优化用户的体验。

  缓存的优点

  1.提高浏览器的响应速率;

  2.减少服务器的访问压力;

  3.减少对网络的压力。

  除了浏览器缓存之外,还存在CDN缓存、代理服务器缓存等等;这里主要描述浏览器缓存,浏览器缓存也指的是HTTP缓存,当我们使用浏览器用http协议与服务器交互时,浏览器会使用一种与服务器约定的规则进行缓存操作。

  缓存的类型

  浏览器的缓存位置一般分为强缓存和协商缓存。

  他们之前的区别是强缓存不需要向浏览器发送请求,直接从缓存中读取资源,协商缓存需要询问浏览器缓存是否过期以确定从哪里读取资源。

  强缓存通过设置http header来实现:Expires 和 Cache-Control。

  Expires用来指定资源到期的具体时间,是服务器的具体时间点。该属性是HTTP/1中使用的属性,受限于本地时间,如果本地时间修改,可能会造成缓存失效。

  Cache-Control也用来指定资源的到期时间,他的时间是一个时间范围。比如:Cache-Control:max-age=300,单位是秒,代表该资源的有效时间是5分钟。该属性是HTTP1.1中的属性,如果Expires和Cache-Control都设置,则Cache-Control的优先级高于Expires。

  协商缓存是在强缓存失效之后,浏览器携带缓存标识向服务器发起请求,由服务器决定是否使用缓存。协商缓存可以通过两种HTTP Header来实现:Last-Modified和ETag。

  Last-Modified

  浏览器第一次访问资源时,服务器会在response头中添加时间节点,这个事件点是服务器最后一次修改文件的时间点,浏览器第二次访问该资源时,检测到缓存文件中有last-Modified,就会在第二次请求头中添加if-Modified-Since,值为上次Last-Modified的值,服务器拿到该值后,会与该资源在服务器端的最后修改时间做对比,如果相同,则说明命中缓存,返回304,如果不相同,则会返回200,并返回新资源。

  ETag

  和Last-Modified相同,Last-Modified会返回最后修改的时间点,而Etag会返回一个新的token,第二次请求时,token会在If-None-Match中返回给服务器,服务器会比较token是否一致。

  总结

  浏览器缓存的强缓存和协商缓存如下图:

1.jpg



作者:张欢    

来源:http://www.51testing.com/html/79/n-7795279.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 在“吃”这条路上,人类似乎有取之不尽的灵感。疫情虽然暂时延缓了我们寻找远方美食的步履,却抵挡不住味蕾对健康与美味的双重呼唤。近日,“上门代厨”这一新风潮活跃在各大社交平台,许多网友发帖展示自己的拿手好菜和擅长菜系,表示能够提供上门代厨服务。目前看,这项服务在北京、上海、武汉、长沙等多个城市比较受欢迎。蓝鲸财经记者观察多个平台发现,提供上门代厨服务的以年轻人居多,且厨艺水平参差不平,既有厨师背景的专业“老手”,也有以简单家常菜为主初来乍到的“新人”。从定价来看,各个地区存在差异,但三菜或四菜一汤的基本配置价格多在70元以内。“真的有人会喜欢做饭吗”,带着网友的普遍疑问,记者与几位上门代厨的“小能...
            0 0 1125
            分享
          • ThreadLocal是Java中的一个类,全路径:java.lang.ThreadLocal,用于在多线程环境下存储线程本地变量。在多线程应用程序中,不同线程之间共享数据可能会引发线程安全问题。ThreadLocal通过为每个线程创建独立的变量副本,保证了线程间数据的隔离性,从而有效地解决了这一问题。线程之间的数据访问操作互不影响,提高了多线程应用程序的性能和可靠性。ThreadLocal通常与线程池、异步任务和Web应用程序等场景结合使用,使得在多线程编程时更加方便和安全。虽然ThreadLocal有这么多好处,但在之前的实际使用中用的并不多,只有在性能测试中的随机数性能问题探索和随机方法...
            0 0 1035
            分享
          • 选择题一、数量关系1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,照这样计算,当甲到9层时,乙到( D )层A.5 B.6C.7 D.82、有一份选择题试卷共6个小题,其得分标准是:一道小题答对得8分,答错得0分,不答得2分,某位同学得了20分,则他( D )A.至多答对一道题 B.至少有三个小题没答 C.至少答对三个小题 D.答错两小题3、有只蜗牛要从一口井底爬出来。井深20尺。蜗牛每天白天向上爬3尺,晚上向下滑2尺。请问该蜗牛几天才能爬出井口? (A)A.20B.19C.18D.154、下列哪一个计算结...
            0 0 1298
            分享
          •   做软件测试的人,往往会有这样的想法:由于软件的复杂导致了测试的复杂,所以不能指望培训能给我们很多工作中的实际指导。偏重理论是肯定的,但并非没有意义,虽然理论同样可以从相关的文献资料上得到。因为测试时从来不希望检测被测系统所有可能的输入、路径和状态,那么应该选择什么?什么时候应该停止测试?什么时候应该暂停测试?怎样编写一个测试包,它可以检测足够多的消息和状态的组合来说明没有失败的操作,但是从实用性来说它又足够的小?  测试提出了许多基本的但却令人困惑的难题,带着这些问题,所以参加了几次实用软件测试培训。  一、软件测试员的目标是尽可能早地找出软件缺陷,并确保其得以关闭  仔细思考后,我觉得此...
            0 0 1140
            分享
          •  前端的痛苦作为前端,最痛苦的是什么时候?每个迭代,需求文档跟设计稿都出来了,静态页面唰唰两天就做完了。可是做前端又不是简单地把后端吐出来的数据放到页面上就完了,还有各种前端处理逻辑啊。后端接口还没出来,我就得边写代码边测前端效果,又没有真实数据。有人建议用 Mock 工具,可是每个接口都要自己写 Mock 规则,这得浪费多少时间呀。等到后端好不容易把接口写出来了,一对接联调,好多字段的数据又跟我 Mock 的数据对不上,又得重新改代码。每个迭代都是一场折磨。就是那种,明明知道这个地方整个团队都可以更有效率,但偏偏就是做不到的无力感。黎明的希望直到有一天,我遇到这个神器。我的效率提升...
            12 11 1207
            分享
      • 51testing软件测试圈微信