0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

前端性能优化的必会技术:浏览器缓存你知多少

电子设计 来源:电子设计 作者:电子设计 2020-12-25 17:56 次阅读

概述

在前端开发中,性能一直都是被大家所重视的一点。然而判断一个网站的性能最直观的就是看网页打开的速度,许多大型互联网公司甚至将页面响应速度作为考核的一个硬性标准。在性能方面,根据Yahoo的调查,后台只占5%,而前端高达95%之多,其中有88%的东西是可以优化的。每一个前端工程师都应该思考过前端性能优化方面的问题。

WEB性能优化是一个工程问题,涵盖很多方面,优化方向可以分为:请求数量、请求带宽、缓存利用、页面结构、代码校验。

技术人员都了解通过网络提取内容既速度缓慢又开销巨大。 较大的响应需要在客户端与服务器之间进行多次往返通信,这会延迟浏览器获得和处理内容的时间,还会增加访问者的流量费用。 因此,缓存并重复利用之前获取的资源的能力成为性能优化的一个关键方面。也是一种让网站变快的极佳途径。

缓存分为服务端侧(server side,比如Nginx、Apache)和客户端侧(client side,比如web browser),今天我们主要了解一下浏览器缓存。

在浏览器中输入目标网址时,浏览器会从服务器下载显示页面所需的资源,例如html、图片、css、js,甚至包括字体文件等。然而这些文件中有许多文件(例如图片)都是很少变动的,如果每次都要从服务器重新下载,会延长网页载入时间,在业务量大的时候也会对服务器造成一定压力。如大家熟悉的双11、微博热搜宕机事件。

浏览器缓存控制机制有两种:HTML Meta标签 和HTTP头信息

使用HTML Meta 标签:

<meta http-equiv="Pragma" content="no-cache">

这部分代码是应用在HTML文件中的head头部分。主要作用就是告诉浏览器此HTML页面不被缓存,每次访问都去服务器上下载。使用上很简单,但只有部分浏览器可以支持,而且所有缓存代理服务器都不支持,因为代理不解析HTML内容本身。所以常说的浏览器缓存还是通过http头信息来控制缓存。

HTTP头信息控制缓存

通过浏览器开发者工具我们可以看到,浏览器请求服务器静态资源的响应状态码主要就是下图的三种:

页面的缓存状态是由HTTP协议中关于缓存的信息头决定的,主要的控制关键字有4种:Last-Modified,Etag,Cache-Control,Expires.

Cache-Control 和 Expires首部用于指定缓存时间;

Last-Modified和ETag 首部提供验证机制。

Last-Modified/E-Tag

Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。

Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。

Etag和Last-Modified非常相似,都是通过一个参数来判断,从而决定是否启用缓存。也许大家有疑问那为什么HTTP1.1还有新定义一个Etag,它的出现主要是解决一下Last-Modified无能为力的事情:

1.Last-Modified标注的最后修改只能精确到秒,如果某些文件在1秒钟以内,被修改多次的话,Last-Modified也就无法判断。

2.一些资源的最后修改时间改变了,但是内容没改变,使用ETag就认为资源还是没有修改的。

3.有可能存在服务器不能准确获取资源的最后修改时间,或者与代理服务器时间不一致等情形,这样无法通过修改时间判断资源是否更新

Cache-Control 和 Expires

从性能优化的角度来说,最佳请求是无需与服务器通信的请求:您可以通过响应的本地副本消除所有网络延迟,以及避免数据传送的流量费用。 为实现此目的,HTTP 规范允许服务器返回 Cache-Control 和 Expires指令,这些指令控制浏览器和其他中间缓存如何缓存各个响应以及缓存多久。在有效期内,直接访问浏览器缓存,不会跟服务器交互。也就是上图中的200(from disk cache)。

Expires:

Expires标示资源缓存失效时间,用来指定资源到期的时间,缓存服务器在接收到含有首部字段Expires的响应后,会以缓存来应答请求,在此此字段制定的时间之前,响应资源会一直被保存,在响应http请求时可以直接从浏览器缓存取数据,而无需再次请求。这里需要注意的是如果设置了cache-control的话cache-control的优先级更高。

Cache-control:

Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。Cache-Control 标头是在HTTP/1.1 规范中定义的,取代了之前用来定义响应缓存策略的标头(例如Expires)。 所有现代浏览器都支持Cache-Control,因此,使用它就够了。

Cache-Control的设置值可以是no-cache、no- store、public、private、max-age等:

Cache-Control是关于浏览器缓存的最重要的设置,因为它覆盖其他设置,比如Expires 和Last-Modified。另外,由于浏览器的行为基本相同,这个属性是处理跨浏览器缓存问题的最有效的方法。

在实际应用中只要可能,就给每种资源都指定一个明确的缓存时间。这样客户端就可以直接使用本地副本,而不必每次都请求相同的内容。类似地,指定验证机制可以让客户端检查过期的资源是否有更新。没有更新,就没必要重新发送。

最后,还要注意应同时指定缓存时间和验证方法!只指定其中之一是最常见的错误,于是要么导致每次都在没有更新的情况下重发相同内容(这是没有指定验证),要么导致每次使用资源时都多余地执行验证检查(这是没有指定缓存时间)。当然这不意味着您所有的资源都需要缓存。一些网站的资源90% 以上都可以缓存,而其他网站可能有许多私密或时效要求高的数据根本无法缓存。这个就需要在实际应用中根据实际情况去设定,确定哪些资源可以缓存,并确保其返回正确的Cache-Control 和ETag 标头。

性能优化涵盖太多的方面,以上简单介绍一下浏览器缓存中的一些机制和概念,浏览器是否使用缓存、缓存多久,是由服务器控制的。以上规则都需要在对应服务器设置。如:ngnix,Apache 等,此处就不叙述了。

启迪云-高级开发工程师 杨浩巍

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓存
    +关注

    关注

    1

    文章

    233

    浏览量

    26650
  • 浏览器
    +关注

    关注

    1

    文章

    1016

    浏览量

    35297
收藏 人收藏

    评论

    相关推荐

    AWTK 最新动态:支持浏览器控件

    导读AWTK浏览器控件,基于webview项目实现,将浏览器嵌入到AWTK应用程序中,让开发者可以方便的集成在线帮助和调用地图等功能。awtk-widget-web-view是基于webview实现的AWTK浏览器控件,使得AW
    的头像 发表于 11-20 01:05 148次阅读
    AWTK 最新动态:支持<b class='flag-5'>浏览器</b>控件

    写一个Chrome浏览器插件

    一、什么是浏览器插件 浏览器插件是依附于浏览器,用来拓展网页能力的程序。插件具有监听浏览器事件、获取和修改网页元素、拦截网络请求、添加快捷菜单等功能。使用
    的头像 发表于 11-18 17:12 238次阅读
    写一个Chrome<b class='flag-5'>浏览器</b>插件

    如何优化SSR渲染性能

    服务端渲染(SSR)是一种将前端页面在服务端生成的技术,它可以提高首屏加载速度,改善SEO,并提供更好的用户体验。然而,SSR也可能带来性能
    的头像 发表于 11-18 11:31 264次阅读

    跨域问题是由浏览器的同源策略造成的

    浏览器
    jf_62215197
    发布于 :2024年08月27日 07:51:42

    不只是前端,后端、产品和测试也需要了解的浏览器知识(二)

    继上篇《 不只是前端,后端、产品和测试也需要了解的浏览器知识(一)》介绍了浏览器的基本情况、发展历史以及市场占有率。 本篇文章将介绍浏览器基本原理。 在掌握基本原理后,通过
    的头像 发表于 08-12 14:32 303次阅读
    不只是<b class='flag-5'>前端</b>,后端、产品和测试也需要了解的<b class='flag-5'>浏览器</b>知识(二)

    不只是前端,后端、产品和测试也需要了解的浏览器知识

    一、我们为什么要了解浏览器? 1. 对于前端开发者 1.浏览器是用户体验的第一线。我们需要了解浏览器的工作原理,才能有效地设计和实现用户界面,确保良好的用户体验。 2.好的产品需要考虑
    的头像 发表于 07-01 18:03 448次阅读
    不只是<b class='flag-5'>前端</b>,后端、产品和测试也需要了解的<b class='flag-5'>浏览器</b>知识

    Opera浏览器引领潮流,全球首接端侧AI大模型

    昆仑万维旗下海外平台Opera宣布,其旗舰浏览器Opera One和游戏浏览器Opera GX将正式接入端侧AI大模型,成为全球首个实现这一突破的主流浏览器
    的头像 发表于 06-03 09:18 699次阅读

    微软Edge浏览器响应速度提升42%至76%,优化历史记录、下载功能

    此外,Edge 124版浏览器展开或折叠收藏夹的响应速度也提升了40%。未来数月内,微软将继续优化Edge浏览器,以提升历史记录、下载和钱包等功能的响应速度。
    的头像 发表于 05-29 14:49 638次阅读

    微软Edge浏览器新增文本编辑功能:引入Compose和数字书写功能

    除此之外,Edge 浏览器也对 Windows Ink 的手写体验进行了优化提升。现在,用户可在浏览器地址栏、文本区及“contenteditable”属性的区域内使用数字书写功能。
    的头像 发表于 04-24 15:26 641次阅读

    Edge浏览器关闭Microsoft Rewards扩展原因揭晓

    据报道,近期德国等地的Microsoft Edge浏览器用户发现,安装或启动Microsoft Rewards扩展后,会出现“右上角扩展被Edge浏览器禁用以保障您的浏览器安全”的提醒窗口。
    的头像 发表于 04-10 09:55 771次阅读

    Chrome浏览器将登陆骁龙Windows PC,双方携手优化体验

    科技巨头高通技术公司与谷歌携手宣布,即日起面向搭载骁龙芯片的Windows PC推出优化版Chrome浏览器。这一举措旨在提前为用户带来卓越的上网体验,早于2024年年中即将发布的搭载骁龙X Elite计算平台的PC面市。
    的头像 发表于 03-28 10:09 461次阅读

    高通与谷歌携手推出骁龙Windows PC优化版Chrome浏览器

    今日,科技巨头高通技术公司与谷歌联合宣布,面向搭载骁龙芯片的Windows PC推出优化版Chrome浏览器。此举旨在为用户带来更流畅、更高效的上网体验,并预示着双方合作的进一步深化。
    的头像 发表于 03-28 10:02 728次阅读

    高通和谷歌宣布推出面向搭载骁龙的Windows PC的优化版Chrome浏览器

    高通技术公司和谷歌今日宣布,即日起推出面向搭载骁龙的Windows PC的优化版Chrome浏览器,先于2024年年中即将发布的搭载骁龙®X Elite计算平台的PC面市。
    的头像 发表于 03-27 14:05 556次阅读

    微软推出ONNX Runtime Web,利用WebGPU优化浏览器机器学习性能

    作为微软的 JavaScript 库,ONNX Runtime Web 使得网络开发者能在浏览器环境下部署机器学习模型,并提供多种硬件加速的后端支持。
    的头像 发表于 03-05 14:23 1033次阅读

    Edge浏览器的“效率模式”被认为影响Copilot性能

    帕拉欣指出,Edge 浏览器在电力不足或者手动启用“效率模式”时,会优先节约系统资源,这种做法可能对 Copilot 等应用造成性能下降。对此,他提供了一个具体截图以示说明。
    的头像 发表于 01-23 09:48 735次阅读