热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5缓存机制是什么?怎么更新缓存-

本篇文章给大家带来的内容是关于HTML5缓存机制是什么?怎么更新缓存,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
本篇文章给大家带来的内容是关于HTML5缓存机制是什么?怎么更新缓存,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。【推荐阅读:Html5教程】

背景

离线缓存是HTML5提供的新功能。利用HTML5提供的离线缓存功能可以将站点的一些常用的文件缓存到本地,在没有网络的情况下依旧可以访问缓存的页面。可以被缓存的文件类型有很多,包括但不限于html,css,js,静态图片资源等。

事实上,离线缓存不仅仅在没有网络的情况下会被使用,当有网络的情况下,本地缓存过的文件依旧会被优先使用。有网络的情况下,浏览器会返回200,

离线缓存有很多好处。第一,可以有效提高用户体验,节约用户流量。第二,可以提高页面加载速度,已缓存的资源加载的更快。第三,可以减少服务器负载,浏览器将只从服务器下载更新过或者更改过的资源。

浏览器支持

基本上所有的主流浏览器都支持,除了 IE,毕竟奇葩,像这种浏览器,还是不要去兼容了。

Manifest

要想在页面上使用离线缓存,只需要在页面的html 加入一个manifest属性,使用方法如下。

当浏览器加载页面的时候,发现html上面拥有属性mannifest,就会去请求cache.appcache文件(ps:这只是一个文件名,一般约定以。appcache结尾,文件一般放在项目的根目录下)

btw: mannifest这个文件需要配置 MIME-type为 “text/cache-manifest”,这是必须的。你需要在服务器上进行配置。

我们来看一下manifest这个文件(cache.appcache)应该怎么写

我从w3School找到了这些资料 :

CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存

NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存

FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

cache.appcache文件如下

# CACHE MANIFEST是必须的!
CACHE MANIFEST
/style.css
/logo.png
/app.js
# 不缓存的文件,永远不会被缓存,且离线时是不可用的
NETWORK:
login.js
# 可以使用星号来指示所有其他资源/文件都需要因特网连接:
NETWORK:
*
# 注释:获取不到资源时的备选路径,就跳转到指定页面
FALLBACK:
index.html 404.html

怎么更新缓存

如同文章开始时说的那样,浏览器发现html上有manifest文件时会先去请求cache.appcache文件,再根据manifest文件的内容进行缓存。具体的流程如下

在线情况下,如果是第一次访问应用,浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过应用并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。

而离线情况下,浏览器就直接使用本地的缓存。 有没有发现一个问题,如果我们更新代码了之后,浏览器还是使用了原来的缓存怎么办。

最简单粗暴的方式就是手动清除浏览器的缓存,这当然很大程度在生产环境上是不会这样处理的。

修改manifest的方式

以 “#” 开头的是注释行,但也可满足其他用途。应用的缓存会在其 manifest 文件更改时被更新。如果您编辑了一幅图片,或者修改了一个 Javascript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。

以上就是HTML5缓存机制是什么?怎么更新缓存的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 华为与红帽联手,加速开源电信软件革新
    华为与红帽携手合作,旨在加速开源电信软件的发展,以满足大型电信运营商对灵活网络解决方案的需求。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • 项目风险管理策略与实践
    本文探讨了项目风险管理的关键环节,包括风险管理规划、风险识别、风险分析(定性和定量)、风险应对策略规划及风险控制。旨在通过系统的方法提升项目成功率,减少不确定因素对项目的影响。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
author-avatar
斌冷无情_869
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有