一次js请求一般情况下有哪些地方会有缓存处理

目录

前言

1. 浏览器缓存

1.1 强缓存

用法

代码

理解

1.2 协商缓存

用法

代码

理解

2. 服务端缓存

2.1 反向代理缓存

用法

代码

理解

2.2 应用层缓存

用法

代码

理解

3. CDN缓存

3.1 用法

3.2 理解

4. DNS缓存

4.1 用法

4.2 理解

5. AJAX请求缓存

5.1 用法

5.2 代码

5.3 理解

总结


前言

在现代的Web开发中,性能优化一直是一个重要的话题。缓存作为性能优化的重要手段之一,其作用不可小觑。它能够减少网络传输的数据量,降低服务器的负载,提高页面加载的速度,从而提升用户体验。在一次JavaScript请求的过程中,缓存可能发生在多个地方,包括浏览器缓存、CDN缓存、服务器缓存等。本文将深入探讨这些缓存机制的工作原理、使用方法和相关的代码实现,帮助开发者更好地理解和利用缓存来优化网站性能。

1. 浏览器缓存

1.1 强缓存

用法

强缓存是通过HTTP响应头中的Cache-ControlExpires字段来控制的。Cache-Control可以设置资源的最大生存时间(max-age),而Expires则是一个绝对时间,表示资源的过期时间。

代码

// 设置Cache-Control,资源将被缓存10秒
res.setHeader('Cache-Control', 'max-age=10');

理解

强缓存的优点是能够直接从浏览器缓存中加载资源,不需要发送任何请求到服务器,从而极大地提高了加载速度。但是,一旦资源被缓存,就无法实时更新,直到缓存过期。

1.2 协商缓存

用法

当强缓存失效后,浏览器会发送一个HTTP请求到服务器,带有If-Modified-SinceIf-None-Match字段,服务器根据这些字段来决定是否返回304状态码,告诉浏览器可以使用本地缓存。

代码

// 设置Last-Modified,表示资源的最后修改时间
res.setHeader('Last-Modified', 'Tue, 15 Jun 2021 12:45:26 GMT');
// 设置ETag,表示资源的唯一标识
res.setHeader('ETag', '"abc123"');

理解

协商缓存虽然需要发送请求到服务器,但是当资源未修改时,只需要传输HTTP头部,不需要传输资源内容,仍然能够节省大量的带宽和提高加载速度。

2. 服务端缓存

2.1 反向代理缓存

用法

在Nginx等反向代理服务器中配置缓存规则,根据文件类型、URL等条件来决定哪些资源需要被缓存。

代码

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, no-transform";
}

理解

反向代理缓存能够减轻后端服务器的压力,提高资源加载的速度。但是需要合理配置缓存规则,避免缓存过时的资源。

2.2 应用层缓存

用法

使用Memcached或Redis等缓存数据库来存储经常访问的数据。

代码

const redis = require('redis');
const client = redis.createClient();// 设置缓存
client.set('key', 'value', 'EX', 10); // 缓存10秒// 获取缓存
client.get('key', function(err, reply) {console.log(reply); // 输出:value
});

理解

应用层缓存能够减少数据库查询的次数,提高数据访问的速度。但是需要合理设计缓存策略,避免缓存过多无用的数据。

3. CDN缓存

3.1 用法

将静态资源部署到CDN上,CDN节点会根据配置的规则对资源进行缓存。

3.2 理解

CDN缓存能够将资源缓存到离用户更近的地方,减少资源加载的延迟,提高加载速度。但是需要合理选择CDN服务商,配置合适的缓存规则。

4. DNS缓存

4.1 用法

DNS解析的结果会被浏览器、操作系统等缓存一段时间。

4.2 理解

DNS缓存能够减少DNS解析的次数,提高域名解析的速度。但是当DNS记录更新时,可能会因为缓存导致解析结果不准确。

5. AJAX请求缓存

5.1 用法

在发送AJAX请求时,可以通过设置cache选项来控制是否允许浏览器缓存结果。

5.2 代码

$.ajax({url: 'example.json',cache: false, // 禁用缓存success: function(data) {console.log(data);}
});

5.3 理解

AJAX请求缓存能够减少相同请求的次数,提高数据加载的速度。但是需要根据实际情况来决定是否启用缓存。

总结

缓存是一种重要的性能优化手段,但是需要根据实际情况合理配置和使用。通过理解不同类型的缓存机制,开发者可以更好地利用缓存来提高网站性能,提升用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全 --- 任意文件下载漏洞(1)】任意文件下载漏洞

一,环境,工具准备 1-1 VMVare 16 虚拟机及下载安装(资源) 请参考以下博客安装(特详细):【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安…

Linux ln命令:建立链接文件

如果要想说清楚 ln 命令,则必须先解释下 ext 文件系统(Linux 文件系统)是如何工作的。我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统。如果用一张示意图来描述 ext4 文件系统。 ext4 …

无需编程,小白也能建立个人网站

想要搭建一个属于自己的网站,但又不懂编程?别担心,现在有一个简单的方法可以帮助你轻松实现这个愿望。只需要几个简单的步骤,就可以让小白也能搭建出一个漂亮的网站。 首先,登录乔拓云账号,点击网站搭建进入…

2-多媒体数据压缩国际标准

文章目录 多媒体数据压缩编码的重要性和分类为什么要压缩?计算: 未压缩音频的数据率简答: 环绕声系统-作业题9(简述7.4.3全景声)计算: 未压缩图像的数据量-作业题10(估计尺寸及容量)计算: 未压缩视频的数据率 为什么能压缩?数据压缩编码的两大类无损压缩算法: LZ77-作业题6-(…

大数据Doris(十三):创建用户和创建数据库并赋予权限

文章目录 创建用户和创建数据库并赋予权限 一、创建用户

css-渐变色矩形

效果图&#xff1a; 代码&#xff1a; html: <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"initial-scale1.0, user-scalableno" /><title></title><link …

【多线程面试题 六】、 如何实现线程同步?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; 如何实现线程同步&…

吃豆人C语言开发—Day2 需求分析 流程图 原型图

目录 需求分析 流程图 原型图 主菜单&#xff1a; 设置界面&#xff1a; 地图选择&#xff1a; 游戏界面&#xff1a; 收集完成提示&#xff1a; 游戏胜利界面&#xff1a; 游戏失败界面 死亡提示&#xff1a; 这个项目是我和朋友们一起开发的&#xff0c;在此声明一下…

归并排序(java)

大家好我是苏麟 , 今天说说归并排序 . 归并排序 递归 正式学习归并排序之前&#xff0c;我们得先学习一下递归算法。 定义&#xff1a; 定义方法时&#xff0c;在方法内部调用方法本身&#xff0c;称之为递归. public void show(){System.out.println("aaaa")…

JavaScript_Pig Game切换当前玩家

const current0El document.getElementById(current--0); const current1El document.getElementById(current--1); if (dice ! 1) {currentScore dice;current0El.textContent currentScore;} else {} });这是我们上个文章写的代码&#xff0c;这个代码明显是有问题的&…

Spring Boot进阶(93):体验式教程:手把手教你整合Spring Boot和Zipkin

&#x1f4e3;前言 分布式系统开发中&#xff0c;服务治理是一个比较重要的问题。为了更好地实现服务治理&#xff0c;需要解决服务跟踪问题&#xff0c;即如何对分布式系统中的服务进行监控和追踪。本文将介绍如何使用Zipkin进行服务跟踪&#xff0c;并结合Spring Boot进行整合…

STM32F4X SDIO(一) SD卡介绍

STM32F4X SDIO&#xff08;一&#xff09; SD卡介绍 SD卡分类外观分类容量分类传输速度分类 在之前的章节中&#xff0c;讲过有关嵌入式的存储设备&#xff0c;有用I2C驱动的EEPROM、SPI驱动的FLASH和MCU内部的FLASH&#xff0c;这类存储设备的优点是操作简单&#xff0c;但是缺…

指针仪表读数YOLOV8NANO

指针仪表读数YOLOV8 NANO 采用YOLOV8 NANO训练&#xff0c;标记&#xff0c;然后判断角度&#xff0c;得出角度&#xff0c;可以通过角度&#xff0c;换算成数据

A星算法(A* A Star algorithm)原理以及代码实例,超详细,超简单,大白话谁都能看懂

本文以这篇博主的文章为基础【精选】A*算法&#xff08;超级详细讲解&#xff0c;附有举例的详细手写步骤&#xff09;-CSDN博客 这篇文章的博主做了一个UI界面&#xff0c;但我感觉&#xff0c;这样对新手关注算法和代码本身反而不利&#xff0c;会被界面的代码所干扰。所以笔…

C++多态(超级详细版)

目录 一、什么是多态 二、多态的定义及实现 1.多态构成条件 2.虚函数的重写和协变 虚函数重写的两个例外&#xff1a; 2.1协变 2.2析构函数的重写 &#xff08;析构函数名统一处理成destructor&#xff09; 3.重载、覆盖(重写)、隐藏(重定义)的对比 4.final 和 overr…

大模型在数据分析场景下的能力评测

“你们能对接国产大模型吗&#xff1f;” “开源的 LLaMA 能用吗&#xff0c;中文支持怎么样&#xff1f;” “私有化部署和在线服务哪个更合适&#xff1f;” 自 7 月 14 日发布 AI 数智助理 Kyligence Copilot 后&#xff0c;我们收到了很多类似上面的咨询&#xff0c;尤其…

编程实例:洗车店会员管理系统软件一卡多项目管理编程

编程实例&#xff1a;洗车店会员管理系统软件一卡多项目管理编程 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 1、会员可以直接用手机号&#xff0c;并可以绑定车牌号 2…

软考系统架构之案例篇(软件工程相关概念)

案例篇-软件工程相关概念 1. 流程图和数据流图之间的区别与联系2. 状态图和活动图的含义及其区别3. 活动图和流程图的区别4. 数据流图中所包含的基本元素及其作用5. 数据流图的平衡原则:6. 用例之间的关系7. 类之间的关系以及基本含义8. 对象模型、动态模型和功能模型的含义以及…

虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比

伴随着 IT 云化转型的逐步推进&#xff0c;越来越多的用户加入应用容器化改造的行列&#xff0c;并使用 Kubernetes&#xff08;K8s&#xff09;进行容器部署管理。然而&#xff0c;令不少用户感到困惑的是&#xff0c;由于大部分应用此前都部署在虚拟化或超融合环境&#xff0…

JVM相关面试题(每日一练)

1. 什么是垃圾回收机制&#xff1f; 垃圾收集 Garbage Collection 通常被称为“GC”&#xff0c;它诞生于1960年 MIT 的 Lisp 语言&#xff0c;经过半个多世纪&#xff0c;目前已经十分成熟了。 jvm 中&#xff0c;程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭&a…