如何优化浏览器缓存

news2024/9/23 1:33:55

每当用户访问您的网站,他他们的浏览器需要从服务器上下载页面显示所需的资源(图片、CSS、JavaScript 和字体等),这些资源的下载会占用带宽,并需要一定的传输时间。但通过正确配置,您可以告知用户的浏览器保存部分文件,这样下一次访问时可以直接从缓存中读取,从而加快页面加载速度。

什么是浏览器缓存?

当浏览器从服务器上下载资源时,会将其保存在本地计算机上。在此过程中,您的网站还可以通过HTTP标头向浏览器发送关于如何、何时以及在何处重新使用这些资源的附加说明。

当浏览器再次从网站请求该资源时,它可以检查本地是否已有保存的副本,并使用该资源加载页面。浏览器管理这个资源池,并跟踪缓存中的每个对象及其URL。

您可以通过重新加载页面来测试浏览器缓存。您会注意到这比初次访问时(或进行“硬刷新”时)快得多,因为浏览器已经本地保存了加载页面所需的一切资源,随时可用。

缓存规则的最佳实践

最好的做法是尽可能多、尽可能频繁、尽可能长时间地缓存。这样才能保证当用户浏览您的网站,或在一段时间内重复访问时,无需反复(重新)下载相同的资源,访问体验尽可能快。

因此一般情况下,我们都会希望充分利用浏览器缓存,并尽可能长时间地存储资源。

但永久缓存所有内容也可能会带来一些麻烦,因而在设置资源的缓存规则时,您需要考虑如果资源发生变化会发生的情况。

例如;假设您修改了 CSS 以更改您的网站布局。您的某些用户可能在他们的浏览器缓存中存储了旧版本的 CSS。他们会看到旧的(或可能甚至是损坏的)布局,因为他们加载了一个“过期”的文件。在这种情况下,您就会希望网站不加载缓存版本;您甚至可能希望使这些缓存资源无效。

使用 WordPress 的资源版本

WordPress 会根据您的主题版本自动将“版本参数”附加到大多数 CSS 和 JavaScript 资源。例如,file.js?ver=1.0.0。

当您的主题更新时,版本号(以及资源​​的 URL)会发生变化。这是一个新文件,因此不存在提供过时文件的风险。

可以通过设置适当的到期时间,或使用新/不同的资源文件名来配置缓存控制规则,以防止此类冲突。由于浏览器缓存与资源的 URL 相关联,因此更改资源的 URL 也是一种万解决方法。

使用 WordPress 缓存图像

WordPress 网站可以安全地永久缓存图像,而不必担心资源过时。这是因为 WordPress 本身不允许编辑者更改文件名 - 因此对图像的任何更改等于直接替换,因此URL也会变更。

管理浏览器缓存

配置浏览器缓存规则时,对于不类型的资源都需要考虑以下3个问题:

是否应允许浏览器缓存它?

应该允许缓存多长时间?

什么情况可能会使该缓存无效?

对大部分的网站来说,一些静态的内容,比如图片或者CSS/JavaScript,应尽可能积极且长时间地缓存。您可以通过设置max-age或设置尽可能遥远的到期日期来实现。

如果您的网站资源上包含版本参数,那么您可以安全地永久缓存它们- 因为一旦进行更改,系统就会提供不同的 URL 来加载。

对于那些不自动对文件进行版本控制的网站,对于缓存规则和过期时间的设置,应该在高效加载资源的优势以及它长时间存在可能带来的风险之间做好平衡。

除了更改URL,您还可以使用更高级的 HTTP 头配置(如“ETags”)来指示浏览器检查缓存文件的内容是否与请求文件的内容匹配。但这些类型的设置很少见,且配置和维护非常复杂。在大多数情况下,对资源进行版本控制是最简单且有效的办法。

检查浏览器缓存设置

您可以使用Google的PageSpeed Insights工具检查浏览器缓存规则是否设置完善,它还会识别未被缓存的资源以及缓存时间较短的资源,必要时可以延长其缓存时间。

在下面的示例中,我们可以看到一系列仅缓存 30 天的图像和字体。如果看到类似结果,您可以考虑延长相关缓存设置的到期日期。

如何实现和配置浏览器缓存

手动配置浏览器缓存可能非常复杂,例如,您可能需要手动修改 .htaccess 文件,这需要有一定的专业知识。

不过您使用的是WordPress,就省事很多,有许多出色的 WordPress 插件可以帮助您设置,大多数好的主机公司也会提供设置合理的默认值,比如Hostease的虚拟主机,在默认设置的基础上,您还可以联系技术支持为您做调整,所以说,选择一个可靠的主机商,对于网站建设来说也是非常重要的。除此之外,您还可以配合使用一个好的 CDN(如 Cloudflare)来进一步优化缓存设置。

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

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

相关文章

JavaScript面向对象小挑战

// 编码挑战 #4 /* 重新创建挑战 #3,但这次使用 ES6 类:为 “CarCl ”类创建一个 “EVCl ”子类将 “charge ”属性设为私有; 实现对该类的 “accelerate ”和 “chargeBattery ”方法进行链式处理的功能,同时更新 “CarCl ”类…

IOS 21 发现界面(UITableView)单曲列表(UITableView)实现

发现界面完整效果 本文实现歌单列表效果 文章基于IOS 20 发现界面(UITableView)歌单列表(UICollectionView)实现 继续实现发现界面单曲列表效果 单曲列表Cell实现 实现流程: 1.创建Cell,及在使用UITable…

datagrip链接sql server2005报错

错误信息 第一次报 DBMS: Microsoft SQL Server (no ver.) Case sensitivity: plainmixed, delimitedexact [08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client pr…

汽车电子行业知识:关于车载中控屏

文章目录 1. 车载中控屏的功能2. 最新技术3. 最新产品4. 未来趋势5. 车载中控屏的供应商5.1. 电子元件制造商5.2. 显示技术公司5.3. 软件和系统集成商5.4. 汽车制造商5.5. 新兴科技公司 车载中控屏是现代汽车中不可或缺的组成部分,它不仅提供了车辆信息的显示&#…

爬楼梯[简单]

优质博文:IT-BLOG-CN 题目 假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1阶…

前端模拟面试:如何检查JavaScript对象属性是否存在?

你正在参加一场关键的前端开发面试,面试官提出了一个经典的JavaScript问题:“在JavaScript中,如何检查对象是否包含某个属性?请你详细介绍几种不同的方法,并解释它们的区别。” 这个问题不仅考验你对JavaScript的基础掌…

注册表分析

目录 介绍步骤regsports 介绍 RegRipper 是一个开源工具,用 Perl 编写,用于从注册表中提取/解析信息(键、值、数据)并将其呈现以供分析。 RegRipper 由两个基本工具组成,它们都提供类似的功能。 RegRipper GUI 允许分…

Mac工程动态库配置和加载探究

缘起 最近在做Mac程序的打包,其中涉及到Mac程序引用了Hoops的第三方动态库。在之前的工程配置中,Project的Run Script是这么来处理动态库的: FRAMEWORKS_DIR${TARGET_BUILD_DIR}/${EXECUTABLE_NAME}.app/Contents/Frameworks/ mkdir -p ${F…

FastDFS分布式存储:概念、集群案例

FastDFS FastDFS:Fast DistributedFileSystem,快速分布式文件系统 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等&…

在x86上拉取ARM架构的镜像

添加–platform 参数 docker pull --platform linux/arm64 nginx:1.27.1查看镜像架构 docker inspect nginx:1.27.1 | grep Architecture

智慧社区管理系统平台:架构全新升级,Java商业版OEM开源定制开发

智慧社区综合管理平台,致力于打造以党建为引领,精细化治理 个性化服务于一体的智慧社区平台。 平台整体包含智慧社区综合管理云平台数字孪生大屏可视化APP微信小程序,满足智慧街道、智慧社区标准化功能建设。数字孪生倾斜摄影,支…

云计算之网络

目录 一、VPC:云网络的基石 1.1 VPC产品介绍 1.2 vswitch交换机 1.3 vrouter路由器 1.4 产品架构 1.5 常见问题解答及处理 1.5.1 VPC内如何查询某个IP归属? 1.5.2 网络ACL阻断导致ECS访问CLB不通 1.5.3 EIP秒级突发/分布式限速丢包 1.5.4 NAT网关的流量监…

C# 窗体小实验 点击确定按钮返回文本框显示

1.1创建c项目 1.2配置新项目 1.3打开工具箱 1.4 创建按钮和文本框 拖至到窗体中 右键确定按钮 点击属性 设置Text(确定)文本显示 ,buttton2同理 设置退出 设置完成效果 双击确定按钮 进入编辑代码窗口 编写代码如下: 然后设置退出的 代码: 单…

btrace 开源!基于 Systrace 高性能 Trace 工具

android.os.Trace#beginSection 会调用 nativeTraceBegin 方法,该方法实现参考 frameworks/base/core/jni/android_os_Trace.cpp。 static void android_os_Trace_nativeTraceBegin(JNIEnv* env, jclass, jlong tag, jstring nameStr) { withString(env, nameStr…

实验报告: lookie-lookie 项目测试与分析

目录 一、实验目的 二、实验环境 三、实验步骤 1. 下载与准备项目 1.1 从 GitHub 获取项目 1.2 查看项目文件结构 2. 运行项目 2.1 启动项目 2.2 浏览器设置 3. 项目体验 3.1 功能测试 3.2 运行截图 4. 文件结构分析 4.1 总体结构 4.2 主要文件和目录说明 5. 数…

ElasticSearch分布式搜索引擎入门

一、ElasticSearch Elasticsearch是一个基于 Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。…

图像白平衡

目录 效果 背景 什么是白平衡? 实现原理 将指定图色调调整为参考图色调主要流程 示例代码 效果 将图一效果转换为图二效果色调: 调整后,可实现色调对换 背景 现有两张图像,色调不一致,对于模型重建会有影响。因…

海洋运输船5G智能工厂物联数字孪生平台,推进制造业数字化转型

海洋运输船5G智能工厂物联数字孪生平台,推进制造业数字化转型。在当今全球制造业的浪潮中,数字化转型已成为不可逆转的趋势,它不仅重塑了生产流程,更深刻影响着企业的竞争力与可持续发展能力。其中,海洋运输船5G智能工…

基于python的Selenium webdriver环境搭建(笔记)

一、PyCharm安装配置Selenium环境 本文使用环境:windows11、Python 3.8.1、PyCharm 2019.3.3、Selenium 3.141.0 测试开发环境搭建综述 安装python和pycharm安装浏览器安装selenium安装浏览器驱动测试环境是否正确 这里我们直接从第三步开始 1.1 Seleium安装…

QT实现文本的读写

使用QT读写文件 来,在程序中文件的读写是非常重要的,毕竟我们在大多数时候都是要访问文本文件的,那么今天就来学习一下怎么使用QT来读写文件。 1.写界面 直接在ui界面中编辑即可 布局小技巧我们先选择两个按钮,然后水平布局&am…