当前位置: 首页 > news >正文

客户端缓存技术

客户端缓存技术主要有以下几种:

  1. 内存缓存:客户端(如浏览器)会将请求到的资源(如HTML页面、图片文件等)存储在内存中,以便在再次访问相同资源时可以快速获取,减少向服务器的请求次数。常见示例是使用localStorage或sessionStorage。

    const cachedData = localStorage.getItem('data');  
    if (cachedData) {  
      // 如果缓存数据存在,直接使用数据  
      renderData(cachedData);  
    } else {  
      // 如果缓存数据不存在,发起网络请求获取数据  
      fetchData().then(data => {  
        // 将获取到的数据存储到localStorage中  
        localStorage.setItem('data', data);  
        // 使用数据渲染页面  
        renderData(data);  
      });  
    }

  2. 磁盘缓存:当内存缓存已满或者资源过大无法放入内存时,客户端会将资源存储在磁盘上。这种方式主要用于存储大容量资源,或者当内存缓存无法存放的资源。常见示例是使用Service Workers。Service Workers是一种运行在浏览器背景的脚本,可以拦截和处理网络请求,包括响应和处理消息推送。

     1.注册Service Worker并设置缓存策略:

    // 在前端脚本中注册Service Worker  
    if ('serviceWorker' in navigator) {  navigator.serviceWorker.register('/service-worker.js')  .then(function(registration) {  console.log('Service Worker注册成功');  })  .catch(function(err) {  console.log('Service Worker注册失败:', err);  });  
    }

    2.创建并设置Service Worker文件(例如:service-worker.js):

    self.addEventListener('install', function(event) {  // 安装阶段,可以在此时将资源缓存到磁盘上  event.waitUntil(  caches.open('my-cache').then(function(cache) {  return cache.addAll('/static/'); // 将指定资源缓存到磁盘上  })  );  
    });  self.addEventListener('fetch', function(event) {  // 获取资源阶段,可以响应已缓存的资源,避免不必要的网络请求  event.respondWith(  caches.match(event.request).then(function(response) {  return response || fetch(event.request); // 如果缓存中有资源,则返回缓存的资源;否则发起网络请求获取资源  })  );  
    });

    这个示例中,在注册Service Worker时,会触发install事件,在install事件中可以通过caches对象将指定资源缓存到磁盘上。当需要获取资源时,Service worker会响应已缓存的资源,避免不必要的网络请求。如果缓存中没有所需的资源,Service worker会发起网络请求获取资源。这种方式可以减少网络请求的次数,提高页面加载速度,从而改善网站性能。

  3. DNS缓存:客户端操作系统通常会缓存DNS解析的结果,即将解析过的域名和实际IP地址对应关系存储在缓存中,减少DNS服务器的解析次数,提高网络访问速度。DNS缓存通常由操作系统或网络设备(如路由器)进行管理,但是,你可以通过以下方式来利用DNS缓存提高网站性能:
    1. 减少DNS查找次数:

      • 将多个相关的域名解析到一个IP地址上,使用DNS别名(CNAME)或域名重定向来减少DNS查找次数。例如,使用多个子域名来指向同一台服务器,而不是为每个子域名分配一个独立的IP地址。
      • 尽量使用较短的域名,以减少DNS查找的时间和资源消耗。
    2. 配置DNS缓存:

      • 在服务器上配置DNS缓存,以便在多次查询同一域名时,直接从缓存中获取解析结果,而不需要再次进行DNS查找。许多操作系统和网络设备都提供了内置的DNS缓存功能。
      • 在浏览器设置中启用DNS缓存,以便在多次访问同一网站时,直接从缓存中获取解析结果,而不需要向服务器发送DNS查询请求。不同的浏览器有不同的设置方法。
    3. 使用稳定的域名解析服务:

      • 选择可靠和稳定的域名解析服务提供商,以确保域名的解析结果的正确性和稳定性。不稳定的域名解析服务可能导致网站的性能下降和不可预测的错误。
  4. 正向代理缓存:正向代理服务器可以缓存客户端请求的数据,例如登录认证信息、偏好设置、浏览痕迹等,以便在下次请求时可以快速获取并避免向源服务器发送请求。
    1. 正向代理缓存的一个示例是使用Squid。Squid是一种常见的反向代理和正向代理服务器,可以缓存网页内容,提高网站性能和可用性。

      以下是一个简单的Squid正向代理缓存的示例配置:

    2. 安装Squid:在服务器上安装Squid软件。具体的安装步骤可能因操作系统而异,可以在Squid官方网站上找到相应的安装指南。

    3. 配置Squid:编辑Squid的配置文件(通常为/etc/squid/squid.conf),进行以下配置:

    4. http_port 3128
      cache_dir ufs /var/spool/squid 100 10 25%
      cache_effective_group webserver
      httpd_accel_host virtual
      httpd_accel_port 80
      httpd_accel_with_proxy -i virtual

      上述配置中,http_port指定了Squid监听的端口号,cache_dir指定了缓存目录的位置和大小,cache_effective_group指定了可访问缓存的用户组,httpd_accel_host和httpd_accel_port配置了反向代理的虚拟主机和端口号。

    5. 启动Squid:启动Squid服务,可以使用以下命令:

    6.  
      sudo service squid start
    7. 配置客户端:在客户端的浏览器或其他网络应用程序中,将HTTP代理设置为指向Squid服务器的IP地址和端口号(例如,IP地址为192.168.0.1,端口号为3128)。这样,Squid将会截取并缓存所有通过代理的HTTP请求。
    8. 通过上述配置,Squid将会缓存网站的内容,并在下一次请求相同内容时直接从缓存中提供响应,从而提高网站的性能和可用性。同时,由于使用了正向代理,客户端不需要进行任何额外的设置即可使用缓存服务。

  5. http缓存:通过http请求头来通知浏览器是否允许缓存页面,以及如何缓存。主要有两种缓存机制,一是强缓存(如Expires和Cache-control),二是协商缓存(如If-Modified-Since和ETag)。

相关文章:

客户端缓存技术

客户端缓存技术主要有以下几种: 内存缓存:客户端(如浏览器)会将请求到的资源(如HTML页面、图片文件等)存储在内存中,以便在再次访问相同资源时可以快速获取,减少向服务器的请求次数…...

Leetcode -2

Leetcode Leetcode -263.丑数Leetcode -268.丢失的数字 Leetcode -263.丑数 题目:丑数就是只包含质因数 2、3 和 5 的正整数。 给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。 示例…...

使用 DFS 轻松求解数独难题(C++ 的一个简单实现)

起因 都说懒惰是第一生产力,最近在玩数独游戏的时候,总会遇到拆解数独比较复杂的情况,就想着自己写个代码解题,解放双手。所以很快就写了一个简单的代码求解经典数独。拿来跑了几个最高难度的数独发现确实很爽!虽说是…...

【SQL server】 表结构的约束和维护

表结构的约束和维护 修改表结构 (1)添加列 (2)删除列 (3)修改列alter table 表名 add 新列名 数据类型给员工表添加一列邮箱 alter table People add PeopleMail varchar(200)删除列 alter table People drop column PeopleMain修改列 alter table 表名 alter column 列名 数据…...

竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…...

Vue3-ref、reactive函数的watch

Vue3-ref、reactive函数的watch ref函数的watch 原理:监视某个属性的变化。当被监视的属性一旦发生改变时,执行某段代码。watch 属性中的数据需要具有响应式watch 属性可以使用箭头函数watch 属性可以监视一个或者多个响应式数据,并且可以配…...

【智能家居项目】FreeRTOS版本——多任务系统中使用DHT11 | 获取SNTP服务器时间 | 重新设计功能框架

🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言:你只管努力,剩下的交给时间! 目录 🍓多任务系统中使用DHT11🍅关闭调度器🍅使用中断 &am…...

Power BI Desktop数据可视化图表

...

鸿蒙APP外包开发需要注意的问题

在进行鸿蒙(HarmonyOS)应用开发时,开发者需要注意一些重要的问题,以确保应用的质量、性能和用户体验。以下是一些鸿蒙APP开发中需要特别关注的问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软…...

Redis 19 事务

Redis通过MULTI、EXEC、WATCH等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求…...

Fabric多机部署启动节点与合约部署

这是我搭建的fabric的网络拓扑 3 个 orderer 节点;组织 org1 , org1 下有两个 peer 节点, peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点, peer0 和 peer1; 以上是我的多机环境的网络拓扑,使用的是docker搭建的。我的网络…...

WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载

WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载 WoodMart是一款出色的WooCommerce商店主题,它不仅提供强大的电子商务功能,还与流行的Elementor页面编辑器插件完美兼容。 主题文件在WoodMart Theme/woodmart.7.3.2.zip,核心在P…...

Java 高等院校分析与推荐系统

1)项目简介 随着我国高等教育的大众化,高校毕业生就业碰到了前所未有的压力,高校学生就业问题开始进入相关研究者们的视野。在高校学生供给忽然急剧增加的同时,我国高校大学生的就业机制也在发生着深刻的变化,作为就业…...

【JVM】Java虚拟机

本文主要介绍了JVM的内存区域划分,类加载机制以及垃圾回收机制. 其实JVM的初心,就是让java程序员不需要去了解JVM的细节,它把很多工作内部封装好了.但是学习JVM的内部原理有利于我们深入理解学习Java. 1.JVM的内存区域划分 JVM其实是一个java进程 ; 每个java进程,就是一个jvm…...

业务架构、技术架构、项目管理的有机结合

新入职的创业公司一年不行了。 这一年来没有上班,也因为大龄的问题找不到合适的工作。然后考了几个项目管理证书,又思考了一个技术兑现的问题。 技术本身是架构的执行层面,如果上面的公司战略、业务架构变小,缩水,或者…...

拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)

一、拜耳阵列的来源 图像传感器将光线转化成电流,光线越亮,电流的数值就越大;光线越暗,电流的数值就越小。图像传感器只能感受光的强弱,无法感受光的波长。由于光的颜色由波长决定,所以图像传播器无法记录…...

【信息安全】浅谈IDOR越权漏洞的原理、危害和防范:直接对象引用导致的越权行为

前言 ┌──────────────────────────────────┐ │ 正在播放《越权访问》 - Hanser │ ●━━━━━━─────── 00:00 / 03:05 │ ↻ ◁ ❚❚ ▷ ⇆ └───────────────────────────────…...

uni-app 蓝牙打印, CPCL指令集使用

先上代码: GitHub - byc233518/uniapp-bluetooth-printer-demo: 使用uniApp 连接蓝牙打印机 Demo, CPCL 指令简单实用示例 (内含 芝珂,佳博,精臣 多个厂家指令集使用文档) 文件结构: ├── App.vue ├── CPCL 指令手册.pdf // 指令集参考手册 ├── LICENSE ├── R…...

vue-组件通信(二)

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-组件通信(二) 目录 组件通信(二) (1) props / $emit 1. 父组件向子组…...

2023年【危险化学品经营单位安全管理人员】考试题及危险化学品经营单位安全管理人员模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试题是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位安全管理人员模拟试题,安全生产模拟考试一点通上危险化学品经营单位安全管理人员作业手机同步练习。…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...