复习前端:浏览器缓存策略

简介: 笔记

13.png

1.引入浏览器缓存位置和优先级


  • Service Worker
  • 内存缓存
  • 磁盘缓存
  • 推送缓存
  • 如果上面的缓存没有命中,则会发起网络请求



2.不同缓存的差异


2.1 Service Worker

有点类似于 Web Worker,是一个独立的线程,可以在这个线程中缓存文件,当主线程需要的时候从这里读取文件。Service Worker 允许自由选择缓存哪些文件以及文件的匹配和读取规则。并且缓存是持久的。

2.2 内存缓存

即内存缓存,内存缓存不是持久化的,缓存会随着进程的释放而释放。

2.3 磁盘缓存

即硬盘缓存,与内存缓存相比,硬盘缓存具有更好的持久性和容量,会根据HTTP头的字段判断需要缓存哪些资源。

2.4 推送缓存

即 push cache,这是 HTTP/2 的内容,目前用的比较少。


3.浏览器缓存策略


3.1 强缓存(不需要向服务器索要缓存)

设置 expires

就是过期时间,例如,expires: Tue, 18 Apr 2023 06:29:41 GMT 表示缓存将在这个时间后过期。这个到期日期是一个绝对日期。如果修改了本地日期,或者本地日期与服务器日期不一致,那么缓存过期时间就会出错。

设置 Cache-Control

HTTP/1.1增加了一个新的字段,cache-control 可以通过 max-age 字段设置过期时间,cache-control: max-age=7776000 另外 cache-control 还可以设置private/no-cache 等字段。

3.2 协商缓存(需要询问服务器缓存是否过期)

last-modified

即最后修改时间,当浏览器第一次请求该资源时,服务器会在响应头中添加 last-modified。当浏览器再次请求该资源时,浏览器会在请求头中带上 if-modified-since 字段,该字段的值为上一个服务器返回的最后修改时间,服务器比较两次,如果相同则返回 304,否则返回新的资源并更新 last-modified

ETag

HTTP/1.1 中的一个新字段表示文件的唯一标识符,只要文件内容发生变化,就会重新计算ETag。缓存过程与 last-modified 相同:服务器发送 ETag 字段 -> 浏览器再次请求时发送 If-None-Match -> 如果ETag值不匹配,则文件已更改,返回新的资源并更新ETag,匹配则返回304。

last-modified 和 ETag 的比较

ETag 比 last-modified 更准确:如果打开没有修改的文件,last-modified 也会改变,last-modified 的单位时间是秒。如果文件在一秒钟内被修改,它仍然会命中缓存。

如果没有设置缓存策略,浏览器会将响应头中的Date减去 last-modified 值的10%作为缓存时间。


相关文章
|
14天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
|
23天前
|
缓存 边缘计算 监控
2024年前端性能优化的新策略
【10月更文挑战第3天】本文分享了一些2024年前端性能优化的新策略,希望能够为前端开发者提供实用的参考和指导。在实际开发中,应根据应用的具体需求和场景选择合适的优化方法。
|
19天前
|
缓存 算法 数据挖掘
深入理解缓存更新策略:从LRU到LFU
【10月更文挑战第7天】 在本文中,我们将探讨计算机系统中缓存机制的核心——缓存更新策略。缓存是提高数据检索速度的关键技术之一,无论是在硬件还是软件层面都扮演着重要角色。我们会详细介绍最常用的两种缓存算法:最近最少使用(LRU)和最少使用频率(LFU),并讨论它们的优缺点及适用场景。通过对比分析,旨在帮助读者更好地理解如何选择和实现适合自己需求的缓存策略,从而优化系统性能。
30 3
|
22天前
|
缓存 前端开发 JavaScript
前端性能优化:提升用户体验的关键策略
【10月更文挑战第4天】前端性能优化:提升用户体验的关键策略
43 1
|
2天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
21 10
|
1天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
1天前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
2天前
|
缓存 监控 NoSQL
Redis 缓存穿透及其应对策略
【10月更文挑战第23天】通过以上对 Redis 缓存穿透的详细阐述,我们对这一问题有了更深入的理解。在实际应用中,我们需要根据具体情况综合运用多种方法来解决缓存穿透问题,以保障系统的稳定运行和高效性能。同时,要不断关注技术的发展和变化,及时调整策略,以应对不断出现的新挑战。
17 4
|
3天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
13 1
|
6天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。