首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript中的前端缓存策略

JavaScript中的前端缓存策略

原创
作者头像
iwhao
发布于 2024-07-07 08:26:12
发布于 2024-07-07 08:26:12
31500
代码可运行
举报
运行总次数:0
代码可运行

在互联网技术飞速更新的今天,前端性能的优化已经成为决定用户体验优劣的核心环节。在这其中,前端缓存策略作为一种有效的性能提升手段,它不仅显著减轻了服务器的负载,还大幅缩短了页面加载时间,从而极大提升了用户的满意度和使用体验。本文旨在深入剖析JavaScript在前端缓存策略中的应用,旨在为开发者提供更为实际和详尽的指导,帮助他们更精准地把握并运用这些策略,以优化网站性能。

前端缓存的类型

前端缓存主要分为以下几种类型:

  • 浏览器缓存:浏览器会将用户访问过的页面资源存储在本地,当再次请求相同的资源时,可以直接从本地读取,避免重复的网络请求。
  • Web缓存:通过HTTP协议的缓存控制机制,服务器可以指定资源在客户端的缓存策略。
  • Service Workers缓存:Service Workers是一种运行在浏览器背后的脚本,可以拦截网络请求,实现资源的缓存和更新。
  • LocalStorage/SessionStorage缓存:利用浏览器的存储API,将数据保存在客户端。

浏览器缓存策略

浏览器缓存策略主要包括强缓存和协商缓存两种。

强缓存

通过设置HTTP响应头中的Cache-Control字段,可以控制资源的缓存时间。

例如,Cache-Control: max-age=31536000表示资源在本地缓存1年。

设置强缓存

代码语言:js
AI代码解释
复制
res.setHeader('Cache-Control', 'max-age=31536000');

协商缓存

通过设置ETag和Last-Modified字段,浏览器在请求资源时会携带这些字段,服务器根据这些字段判断资源是否发生变化,如果未变化,则返回304状态码,告知浏览器使用缓存。

代码语言:js
AI代码解释
复制
// 设置协商缓存
const etag = 'W/"123456789012345678901234567890"';
const lastModified = 'Fri, 22 Dec 2023 00:00:00 GMT';
res.setHeader('ETag', etag);
res.setHeader('Last-Modified', lastModified);

Service Workers缓存策略

Service Workers可以拦截网络请求,实现资源的预加载、缓存和更新。以下是一个简单的Service Workers缓存示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 注册Service Worker
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js').then(registration => {
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, err => {
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

// service-worker.js
self.addEventListener('install', event => {
  event.waitUntil(
    caches.open('my-cache').then(cache => {
      return cache.addAll([
        '/index.html',
        '/styles/main.css',
        '/scripts/main.js'
      ]);
    })
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

LocalStorage/SessionStorage缓存策略

LocalStorage和SessionStorage提供了在浏览器中存储数据的能力,适合缓存非敏感数据。以下是一个简单的LocalStorage缓存示例:

代码语言:js
AI代码解释
复制
    // 缓存数据
    function cacheData(key, data) {
      localStorage.setItem(key, JSON.stringify(data));
    }

    // 获取缓存数据
    function getCachedData(key) {
      const data = localStorage.getItem(key);
      return data ? JSON.parse(data) : null;
    }

资源版本控制

在资源URL后添加版本号或时间戳,如script.js?v=1.0,每当资源更新时,更改版本号,以避免浏览器使用旧版本的缓存文件。

综合缓存策略

在实际应用中,通常会结合多种缓存策略来实现最优的性能优化,对于不同场景应用不同的缓存搭配,例如下方几种

对于不经常变化的静态资源,使用强缓存。

对于经常变化的内容,使用协商缓存。

使用Service Workers进行资源的预加载和缓存。

对于敏感数据,可以使用LocalStorage/SessionStorage进行缓存。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【性能】688- 前端性能优化——从 10 多秒到 1.05 秒
关于 性能优化 是个大的面,这篇文章主要涉及到 前端 的几个点,如 前端性能优化 的流程、常见技术手段、工具等。
pingan8787
2020/08/21
1.4K0
【性能】688- 前端性能优化——从 10 多秒到 1.05 秒
浏览器缓存机制
Service Worker是运行在浏览器背后的独立线程,一般可以用于实现缓存。使用service worker,传输协议必须为HTTPS。因为service worker 中涉及到请求拦截。
用户3258338
2020/02/25
1.5K0
浏览器缓存机制
HTTP缓存策略
缓存的作用就是提升网页加载速度。浏览器加载一个完整的网页势必会引用外部资源(图片,js,css)。若每次加载网页都要去加载这些外部资源则会引起不必要的时间和资源浪费,且会影响用户体验。而解决上述问题需要一个优秀的缓存策略。除此之外,web缓存的优点还有很多,例如:减轻服务器压力
ruochen
2021/11/25
6620
认识浏览器缓存
关于何为前端缓存,这里结合具体实际给出一个简单的定义:在两次不同的运行时中,能够共享的数据可以成为前端缓存。如何理解两次不同的运行时呢,可以理解为两次不同的页面加载过程。比如加载A页面,得到上下文环境:RunTime1,加载B页面,得到上下文:RunTime2。这两个运行时可以共享数据Front_CacheData_AB。A页面和B页面可以同时在运行时,也可以A页关闭后再打开B页面。下图1比较形象的给出了前端缓存的这种定义~
丁涛
2020/06/14
1.7K0
认识浏览器缓存
ServiceWorker工作机制与生命周期:资源缓存与协作通信处理
在 《web messaging与Woker分类:漫谈postMessage跨线程跨页面通信》介绍过ServiceWorker,这里摘抄跟多的内容,补全
周陆军
2021/07/03
1.8K0
浏览器 & HTTP 缓存策略
强缓存是指在缓存期间,请求不会发送到服务器,浏览器直接返回缓存结果,需要设置 Header:
leocoder
2020/03/27
6340
HTTP缓存,浏览器缓存
可分为两大类:http缓存和浏览器缓存。我们今天重点讲的是http缓存,所以关于浏览器缓存大家自行去查阅。下面这张图是前端缓存的一个大致知识点:
回忆大大
2023/03/19
1.1K0
HTTP缓存,浏览器缓存
缓存策略
根据文章内容总结为摘要总结。
IMWeb前端团队
2018/01/08
1.8K0
缓存策略
Web Workers与Service Workers:后台处理与离线缓存
Web Workers 和 Service Workers 是两种在Web开发中处理后台任务和离线缓存的重要技术。它们在工作原理和用途上有显著区别。
天涯学馆
2024/06/21
5140
前端本地缓存概况之浏览器缓存策略
一直以来,前端性能优化 都是前端程序员在业务开发过程中不得不考虑的一个点。前端同学也一直寄希望于服务器更大的吞吐量、更密集的cdn节点;更寄希望于浏览用户使用更优秀的浏览器及更大的带宽。。。然而随着上述几种情况一一被落实时,前端性能仍然没有达到一个让人满意的结果。。。
YP小站
2020/07/15
1.9K0
前端本地缓存概况之浏览器缓存策略
Web前端性能优化(三)
因为HTTP请求无状态,当这一次 HTTP 请求结束之后,这个链接就关闭了,而下一次需要发起这个请求时,服务端不会知道这个请求是和之前某一个请求,来自同一个客户端的,不能跟踪 HTTP 请求的会话和发生情况,在这种场景下,就很难去处理登录信息、用户信息的维护问题,所以需要 Cookie 去维持客户端状态,需要注意的是,Cookie 是存在过期时间 expire 的
Nian糕
2019/05/14
7400
Web前端性能优化(三)
前端缓存最佳实践
在介绍缓存的时候,我们习惯将缓存分为强缓存和协商缓存两种。两者的主要区别是使用本地缓存的时候,是否需要向服务器验证本地缓存是否依旧有效。顾名思义,协商缓存,就是需要和服务器进行协商,最终确定是否使用本地缓存。
小生方勤
2019/06/03
1.1K1
一文读懂浏览器缓存
浏览器缓存一直是个老生常谈的话题,也是面试官常常用来鉴别面试者的利器,作为前端来讲这块知识是属于必须掌握的,再者利用好缓存也是做性能优化的有效方法。本文将从缓存原因、缓存读写顺序,缓存位置以及缓存策略这几个角度介绍浏览器缓存,并且最后给出实践的应用举例。
用户4456933
2021/06/01
4890
一文读懂浏览器缓存
WorkBox 之底层逻辑Service Worker
在前几天师夷长技以制夷:跟着PS学前端技术文件中,我们提到了WorkBox,然后自己也对这块很感兴趣,所以就利用业余时间进行相关资源的查询学习和实践。在学习过程中发现,想要弄明白WorkBox,有一点很关键,我们需要搞懂Service Worker。
前端柒八九
2023/11/01
8100
WorkBox 之底层逻辑Service Worker
HTTP缓存和浏览器的本地存储
http请求做为影响前端性能极为重要的一环,因为请求受网络影响很大,如果网络很慢的情况下,页面很可能会空白很久。对于首次进入网站的用户可能要通过优化接口性能和接口数量来解决。但是,对于重复进入页面的用户,除了浏览器缓存,http缓存可以很大程度对已经加载过的页面进行优化。
用户5807183
2019/10/20
2K0
service worker 使用
每次页面加载成功后,就会调用 register() 方法,浏览器将会判断 service worker 线程是否已注册并做出相应的处理。 scope 参数是可选的,默认值为 sw.js 所在的文件目录。 打开 chrome 浏览器, 输入 chrome://inspect/#service-workers 可以可以用 DevTools 查看 Service workers 的工作情况。
李振
2021/11/26
1.7K0
service worker 使用
Service Worker:让你的 Web 应用牛逼起来
https://github.com/omnipotent-front-end/blog/issues/2
coder_koala
2020/04/22
2.6K0
Service Worker:让你的 Web 应用牛逼起来
Service Workers - JavaScript API 简介
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2020/12/07
1.1K0
理解 Service Workers
Service Workers 是什么?它们能做什么,它如何让您的 web 应用更好的表现?本文旨在回答这些问题,以及如何使用 Ember.js 框架来实现 Service Worker。
疯狂的技术宅
2019/03/27
2K0
理解 Service Workers
通过 Node.js 小示例学习浏览器缓存策略
在后端为了加速服务的访问速度,通常可以使用 Memcached、Redis 做数据缓存,那么在浏览器端又有哪些缓存策略呢?
五月君
2020/09/17
1.5K0
相关推荐
【性能】688- 前端性能优化——从 10 多秒到 1.05 秒
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档