当前位置: 首页 > 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)。
http://www.lryc.cn/news/234931.html

相关文章:

  • Leetcode -2
  • 使用 DFS 轻松求解数独难题(C++ 的一个简单实现)
  • 【SQL server】 表结构的约束和维护
  • 竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题
  • Vue3-ref、reactive函数的watch
  • 【智能家居项目】FreeRTOS版本——多任务系统中使用DHT11 | 获取SNTP服务器时间 | 重新设计功能框架
  • Power BI Desktop数据可视化图表
  • 鸿蒙APP外包开发需要注意的问题
  • Redis 19 事务
  • Fabric多机部署启动节点与合约部署
  • WordPress主题WoodMart v7.3.2 WooCommerce主题和谐汉化版下载
  • Java 高等院校分析与推荐系统
  • 【JVM】Java虚拟机
  • 业务架构、技术架构、项目管理的有机结合
  • 拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)
  • 【信息安全】浅谈IDOR越权漏洞的原理、危害和防范:直接对象引用导致的越权行为
  • uni-app 蓝牙打印, CPCL指令集使用
  • vue-组件通信(二)
  • 2023年【危险化学品经营单位安全管理人员】考试题及危险化学品经营单位安全管理人员模拟试题
  • Uni-App常用事件
  • 【笔记 Pytorch】稀疏矩阵、scipy.sparse模块的使用
  • C#学习相关系列之Linq常用方法---排序(一)
  • Android Proguard混淆
  • MySQL 1、初识数据库
  • H5ke11--3介绍本地,会话存储
  • 技术分享 | 如何写好测试用例?
  • quarkus的一些注解1
  • 初学Redis(Redis的启动以及字符串String)
  • C++ opencv基本用法【学习笔记(九)】
  • 理财和银保区别