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

HTML5 的离线储存怎么使用?它的工作原理是什么?

HTML5 的离线存储主要通过Application Cache (AppCache)和Service Workers (配合 Cache API)两种技术实现。重要提示早期的AppCache(manifest属性) 虽然简单但存在严重的缺陷如缓存更新困难、容易陷入死循环等已被 W3C 废弃现代浏览器已不再推荐使用。目前行业标准和最佳实践是使用Service Workers配合Cache Storage API。以下将分别介绍这两种方式重点讲解现代方案。一、现代方案Service Workers Cache API (推荐)这是目前构建 PWA (Progressive Web App) 和离线应用的核心技术。1. 工作原理Service Worker 是一个运行在浏览器后台的JavaScript 脚本它独立于网页运行充当网络代理 (Network Proxy)。注册与安装网页注册一个 Service Worker 脚本。浏览器下载并安装该脚本。拦截请求一旦激活Service Worker 会拦截页面发出的所有网络请求Fetch 事件。缓存策略当请求发生时Service Worker 首先检查Cache Storage浏览器提供的持久化缓存。如果缓存中有直接返回缓存内容离线可用。如果缓存中没有则发起网络请求。网络请求成功后可以将新内容存入缓存再返回给页面。更新机制当 Service Worker 脚本文件发生微小变化甚至只是字节变化浏览器会自动下载新版本并在后台安装。一旦新 Worker 准备就绪它会接管页面旧 Worker 停止。2. 使用步骤步骤 A: 创建 Service Worker 文件 (例如sw.js)// sw.jsconstCACHE_NAMEmy-site-cache-v1;consturlsToCache[/,/index.html,/styles.css,/script.js,/images/logo.png];// 1. 安装事件缓存静态资源self.addEventListener(install,(event){event.waitUntil(caches.open(CACHE_NAME).then((cache){console.log(Opened cache);returncache.addAll(urlsToCache);}));// 跳过等待立即激活self.skipWaiting();});// 2. 激活事件清理旧缓存self.addEventListener(activate,(event){event.waitUntil(caches.keys().then((cacheNames){returnPromise.all(cacheNames.map((cacheName){if(cacheName!CACHE_NAME){console.log(Deleting old cache:,cacheName);returncaches.delete(cacheName);}}));}));// 接管所有控制范围self.clients.claim();});// 3. 拦截请求事件核心逻辑self.addEventListener(fetch,(event){event.respondWith(caches.match(event.request).then((response){// 缓存命中返回缓存if(response){returnresponse;}// 缓存未命中发起网络请求returnfetch(event.request).then((response){// 检查是否是有效的响应if(!response||response.status!200||response.type!basic){returnresponse;}// 克隆响应因为响应流只能读取一次constresponseToCacheresponse.clone();caches.open(CACHE_NAME).then((cache){cache.put(event.request,responseToCache);});returnresponse;});}));});步骤 B: 在主页面中注册 Service Worker// main.js 或 HTML 中的 script 标签if(serviceWorkerinnavigator){window.addEventListener(load,(){navigator.serviceWorker.register(/sw.js).then((registration){console.log(SW registered: ,registration);}).catch((error){console.log(SW registration failed: ,error);});});}步骤 C: 测试使用 HTTPS 环境localhost 除外。打开浏览器开发者工具 - Application - Service Workers勾选 “Offline” 模拟离线状态。刷新页面你会发现即使断网页面依然能正常加载因为走了缓存。二、旧方案Application Cache (AppCache) (已废弃)注意除非维护极老的遗留系统否则不要在新项目中使用此方法。1. 工作原理通过在 HTML 标签中指定manifest属性告诉浏览器哪些文件需要缓存。浏览器会自动管理这些文件的缓存无需编写 JS 逻辑。2. 使用步骤步骤 A: 创建 manifest 文件 (例如app.manifest)CACHE MANIFEST # 版本号注释修改此注释可强制更新缓存 # v1.0.1 # 需要缓存的文件 CACHE: /index.html /style.css /app.js /logo.png # 需要联网访问的文件 NETWORK: /api/data * # 离线时替代文件 FALLBACK: / /offline.html步骤 B: 在 HTML 中引用!DOCTYPEhtmlhtmlmanifestapp.manifestheadtitle旧版离线应用/title/headbodyh1Hello World/h1/body/html3. 主要缺陷 (为什么被废弃)更新困难只要 manifest 文件中的任何一个字符发生变化包括注释浏览器就会认为整个缓存需要更新并重新下载所有列出的文件即使文件内容没变。缓存锁定如果用户第一次访问时网络不好manifest 文件没下载完浏览器可能会锁定该状态导致后续即使网络好了也无法更新缓存。无法精细控制无法像 Service Worker 那样灵活地决定“先网后缓存”还是“先缓存后网”。调试困难缓存行为不透明难以排查问题。三、总结对比特性Service Workers (推荐)Application Cache (废弃)实现方式JavaScript 编程HTML 属性 Manifest 文件灵活性极高 (可自定义任何缓存策略)低 (只能按列表缓存)更新机制脚本变化即更新支持版本控制依赖 manifest 文件变化容易误判网络控制可拦截所有请求支持离线优先、网络优先等简单黑白名单调试可通过 DevTools 详细查看难以调试浏览器支持现代浏览器全面支持已废弃新浏览器不再推荐HTTPS 要求必须 (localhost 除外)不需要结论请使用 Service Workers。它是 HTML5 离线存储的现代标准提供了强大的控制能力和更好的用户体验。如果你正在学习或开发 PWAService Worker 是必须掌握的核心技术。

相关文章:

HTML5 的离线储存怎么使用?它的工作原理是什么?

HTML5 的离线存储主要通过 Application Cache (AppCache) 和 Service Workers (配合 Cache API) 两种技术实现。 重要提示: 早期的 AppCache (manifest 属性) 虽然简单,但存在严重的缺陷(如缓存更新困难、容易陷入死循环等)&#…...

2017-2023年商业银行相关数据

商业银行数据概览(2017-2023年)商业银行数据通常涵盖资产规模、盈利能力、不良贷款率、资本充足率等关键指标。以下是基于公开渠道整理的部分核心数据趋势和分析:数据来源建议中国银保监会年度报告中国人民银行《中国金融稳定报告》各上市银行…...

Qwen3-ASR在司法领域的应用:庭审语音自动转录系统

Qwen3-ASR在司法领域的应用:庭审语音自动转录系统 庭审记录是司法工作的核心环节,传统人工记录方式面临效率低、易出错、成本高等痛点 在传统的法庭庭审中,书记员需要全程专注地记录每一句发言,这不仅对人员的专注力是极大考验&am…...

ESP01S与Arduino IDE:从零搭建物联网开发环境

1. 硬件准备与基础认知 第一次接触ESP01S时,我完全被这个小东西震惊了——比指甲盖大不了多少的模块,居然能实现WiFi连接和物联网控制。对于刚入门的开发者来说,ESP01S确实是性价比极高的选择。市面上常见的开发套装通常包含两个关键部件&…...

AI应用架构师必看:企业AI效能评估的“工具链+流程化”落地方案

AI应用架构师必看:企业AI效能评估的“工具链流程化”落地方案 关键词 AI效能评估、业务价值对齐、工具链闭环、流程化运营、因果归因、数据驱动迭代、ROI量化 摘要 作为AI应用架构师,你是否曾遇到过这样的困境: 花费数月打磨的推荐模型&#…...

ESP32异步NeoPixel控制中间件设计与实现

1. NeopixelCommander 项目概述NeopixelCommander 是一个面向 ESP32 和 ESP32-S2 平台的轻量级、异步驱动型 NeoPixel 控制中间件,其核心设计目标是将物理 LED 控制能力通过标准化网络协议暴露为可远程调用的服务接口。它并非传统意义上的底层驱动库(如 …...

5步精通Driver Store Explorer:Windows驱动清理与空间释放全攻略

5步精通Driver Store Explorer:Windows驱动清理与空间释放全攻略 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Windows系统随着使用时间增长,C盘空间神…...

2024年AI辅助编程工具新物种:专注架构设计的AI助手横评(含架构图生成工具对比)

2024年AI辅助编程工具新物种:专注架构设计的AI助手横评(含架构图生成工具对比) 关键词:AI辅助编程工具、架构设计、AI助手、架构图生成工具、横评 摘要:本文聚焦于2024年新出现的专注架构设计的AI辅助编程工具,对不同的AI助手进行了详细横评,同时对比了相关的架构图生成…...

从零实现一个C++多进制计算器:蓝桥杯常见指令解析与避坑指南

从零构建C多进制计算器:蓝桥杯指令系统实战解析 在算法竞赛中,处理多进制计算问题一直是让初学者头疼的典型场景。蓝桥杯等赛事常通过这类题目考察选手对基础数据结构的掌握程度和逻辑抽象能力。本文将带您从零开始,用C实现一个支持动态进制转…...

从0开始理解并发、线程与等待通知机制(中)

线程启动与终止 线程启动方式 继承 Thread 类并重写 run() 方法。实现 Runnable 接口并交给 Thread 执行。 线程终止方式 不建议使用 stop() 方法,因其具有强制性,可能导致资源未正确释放。推荐使用中断机制:调用 interrupt() 方法&#xf…...

CLIP-GmP-ViT-L-14企业级部署:基于VMware虚拟化环境的高可用架构

CLIP-GmP-ViT-L-14企业级部署:基于VMware虚拟化环境的高可用架构 如果你在企业里负责IT运维或者系统架构,最近可能正琢磨着怎么把那些厉害的AI模型,比如CLIP-GmP-ViT-L-14这种能看懂图片又能理解文字的模型,给稳稳当当地跑起来。…...

ESXi虚拟化实战:如何用Web界面5分钟快速部署Ubuntu Server虚拟机

ESXi虚拟化实战:5分钟极速部署Ubuntu Server全指南 当你需要在企业内部快速搭建一套开发测试环境,或是为临时项目部署隔离的沙箱系统时,传统物理服务器的采购和配置流程显然无法满足时效需求。这正是ESXi这类企业级虚拟化平台展现价值的时刻—…...

电力系统动态无功补偿技术:基于MATLAB/Simulink仿真的静止无功发生器SVG与控制策...

电力系统动态无功补偿 MATLAB,simulink仿真 静止无功发生器SVG SVPWM控制,ip-iq瞬时无功电流检测,电压PI外环,电流PI内环控制。 三类负载,阻感性,阻容性,谐波负荷在电力系统中,动态无…...

突破语言壁垒:FigmaCN插件的本地化技术架构与实践指南

突破语言壁垒:FigmaCN插件的本地化技术架构与实践指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 一、问题诊断:中文设计师的效率困境与量化分析 1.1 设计流…...

Win10安装EMQX保姆级教程:解决‘Unable to load emulator DLL‘报错(附Erlang/OTP下载加速)

Win10安装EMQX全流程指南:从Erlang配置到MQTT服务搭建 在物联网和实时消息传递领域,EMQX作为一款高性能的MQTT消息代理服务器,已经成为开发者构建分布式物联网平台的首选工具之一。然而,对于Windows平台的新手开发者来说&#xff…...

数字孪生场景能否私有化部署,数据安全如何实现可靠保障

数字孪生在智慧城市、工业制造、建筑可视化等领域快速落地,企业在选型时普遍关注两个核心问题,一是数字孪生场景能否实现私有化部署,二是数据安全能否得到稳定保障。实时渲染作为数字孪生呈现的核心支撑,部署模式与安全能力直接决…...

【LPDDR5深度解析】--- 从引脚定义看架构演进与设计考量

1. LPDDR5与LPDDR4X的架构差异全景图 当我们把LPDDR5和LPDDR4X的芯片放在显微镜下观察时,最先冲击视觉的就是引脚布局的显著变化。这种物理层面的改变绝非偶然,而是内存架构师们为突破性能瓶颈所做的精心设计。以最常见的4GB容量为例,LPDDR4X…...

3分钟掌握艾尔登法环存档迁移:开源工具让游戏进度永不丢失 ⚔️

3分钟掌握艾尔登法环存档迁移:开源工具让游戏进度永不丢失 ⚔️ 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 还在为艾尔登法环存档损坏而烦恼吗?当数百小时的游戏进度因为一次意外而…...

Thorium浏览器:让网页浏览速度提升30%的开源性能优化方案

Thorium浏览器:让网页浏览速度提升30%的开源性能优化方案 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of the RE…...

ElasticSearch 数据清理全攻略:从单文档到批量删除

1. 初识ElasticSearch数据清理 第一次接触ElasticSearch的数据清理功能时,我踩过不少坑。记得有次不小心把生产环境的索引删了,差点酿成大祸。从那以后,我就特别重视数据清理这个看似简单实则暗藏玄机的操作。 ElasticSearch提供了多种数据清…...

嵌入式PWM蜂鸣器驱动库:轻量、确定、可移植的压电发声方案

1. 项目概述beep_sound是一个面向嵌入式微控制器的轻量级音频驱动库,专为通过 PWM(脉宽调制)信号直接驱动压电蜂鸣器(Piezoelectric Buzzer)而设计。其核心目标是在资源受限的 MCU 环境下,以极低的代码体积…...

如何快速配置高效的反撤回插件:QQNT防撤回完整使用教程

如何快速配置高效的反撤回插件:QQNT防撤回完整使用教程 【免费下载链接】LiteLoaderQQNT-Anti-Recall LiteLoaderQQNT 插件 - QQNT 简易防撤回 项目地址: https://gitcode.com/gh_mirrors/li/LiteLoaderQQNT-Anti-Recall 在当今快节奏的在线沟通中&#xff0…...

传送带突然加速?PLC程序员的翻车现场

基于PLC1200与Factory IO设计的模拟工厂设计 TIA Portal V15.1与Factory IO联机仿真运行系统(不用实物PLC)入下图: 1、有设计程序和仿真环境; 2、有演示视频。前两天在调试Factory IO的立体仓库模型时,传送带突然像脱缰…...

Spring Boot 自动配置 2.0 深度解析(七):从 spring.factories 到 @AutoConfiguration 的范式转移

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战 | Day 07 上一篇:[D6 Spring Boot 4 架构巨变解析] | 下一篇:[D8 响应式全家桶升级] 引子:一个让整个 Spring 生态颤抖的注解 2013 年,Spring Boot 用 spring.factories + @EnableAutoConfiguration 一套组合拳干掉了 XML…...

nlp_seqgpt-560m与YOLOv8结合应用:智能图像文本联合分析系统

nlp_seqgpt-560m与YOLOv8结合应用:智能图像文本联合分析系统 1. 引言 想象一下这样的场景:你拿到一张产品宣传海报,上面有产品图片、功能介绍文字、价格信息,还有各种促销标签。传统方式需要人工分别处理图片和文字信息&#xf…...

Keyviz深度探索:你的数字操作轨迹可视化利器

Keyviz深度探索:你的数字操作轨迹可视化利器 【免费下载链接】keyviz Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and 🖱️ mouse actions in real-time. 项目地址: https://gitcode.com/gh_mirrors/ke/keyviz 你…...

Wan2.2-T2V-A5B工业设计应用:结合SolidWorks模型生成产品演示动画

Wan2.2-T2V-A5B工业设计应用:结合SolidWorks模型生成产品演示动画 你是不是也遇到过这样的场景?花了好几天时间,用SolidWorks精心设计了一个产品模型,内部结构复杂,功能巧妙。当你兴冲冲地想向客户、领导或者跨部门同…...

搭建两级式电力电子变换器仿真模型:从原理到Matlab/Simulink实现

两级式电力电子变换器仿真模型 前级为三相全桥整流电路,输入380V交流电;后级为闭环Buck电路,采用PI控制,输出为10V直流电;matlab/simulink模型 ,在电力电子领域,两级式电力电子变换器因其能够实…...

CosyVoice与专业音频工具AE结合:AI语音驱动视频片段创作

CosyVoice与专业音频工具AE结合:AI语音驱动视频片段创作 最近在尝试一些视频创作的新玩法,发现了一个挺有意思的组合:用AI语音生成工具来制作视频的配音,然后导入到专业的视频编辑软件里做后期处理。听起来可能有点跨界&#xff…...

飞书机器人集成实战:OpenClaw调用Qwen3.5-4B-Claude处理工单

飞书机器人集成实战:OpenClaw调用Qwen3.5-4B-Claude处理工单 1. 为什么选择OpenClaw处理工单? 去年我接手了一个小团队的客服系统改造项目,团队每天要处理200工单,但80%都是重复性问题。传统方案要么需要复杂的工单系统开发&…...