前两天面试,问到延迟加载和缓存页面资源的问题,最后问用没用过manifest。“真没用过啊,实话!”今天就来玩一玩manifest。
目录
1.Application Cache是什么
2.Manifest文件是什么
3.如何更新缓存
4.实例
5.疑问
使用HTML5,通过创建cache manifest文件,可以轻松地创建web应用的离线版本。
1.Application Cache是什么
HTML5引入了应用程序缓存,这意味着web应用可进行缓存,并可在没有因特网连接时进行访问。
应用程序缓存为应用带来三个优势:
- 离线浏览-用户可在应用离线时使用它们
- 速度-已缓存资源加载得更快
- 减少服务器负载-浏览器将只从服务器下载更新或更改过的资源
2.Manifest文件是什么
manifest文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。
manifest文件可分为三部分:
- CACHE MANIFEST-在此标题下列出的文件将在首次下载后进行缓存
- NETWORK-在此标题下列出的文件需要与服务器连接,且不会被缓存
- FALLBACK-在此标题下列出的文件规定当页面无法访问时的回退页面(如404页面)
3.如何更新缓存
一旦应用被缓存,它就会保持缓存直到发生下列情况:
- 用户清空浏览器缓存
- manifest 文件被修改
- 由程序来更新应用缓存
在manifest文件中,加入日期或则版本号用来修改文件内容,进而去更新被manifest缓存的文件。
Tips:可以通过使用提供的例子,手工修改version号验证缓存的更新
我的manifest文件:my.appcache,文件后缀名为:appcache
CACHE MANIFEST #VERSION 44 # 直接缓存的文件 CACHE: ./images/a.png #需要在时间在线的文件 NETWORK: ./js/jquery.js # 替代方案 FALLBACK: / /Test/b.html #./x.css /Test/a.css
分析:
CACHE MANIFEST是必须的,表明是MANIFEST文件
#是注释
CACHE:表明需要缓存的资源,此处只缓存a.png,本页面不做缓存
NETWORK:表明在线加载的资源,在线加载jquery.js
FALLBACK:当访问某个错误路径时,都转到b.html
4.实例
a.html
<!DOCTYPE> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <link href="x.css" rel="stylesheet" /> </head> <body> <iframe style="display:none;" src="cache.html"></iframe> <div>hello <img src="./images/a.png" > </div> <script type="text/javascript" src="js/jquery.js"></script> </body> </html>
cache.html
<!DOCTYPE> <html manifest="./my.appcache"> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> </head> <body> </body> </html>
你是不是迫不及待的想下载实例玩一把,看看缓存效果了?稍等,还差一步,就是tomcat的配置,需要在tomcat下的conf/web.xml中追加以下内容(copy过去即可),让tomcat认识manifest文件。
<mime-mapping> <extension>manifest</extension> <mime-type>text/cache-manifest</mime-type> </mime-mapping>
OK,保存重启tomcat,在浏览器中输入:http://localhost:8081/Test/a.html
可以看到以下内容:
斗胆翻译一下:
1.访问a.html页面
2.通过manifest文件,从Application Cache中下载了文档
3.Checking Event:当浏览器访问一个页面(cache.html)时并且读到了HTML元素的manifest属性时发生
4.Downloading Event:假如浏览器从未访问过manifest文件,它将下载文件中的所有资源
5.Progress:包含已经下载和余下未下载的文件的信息
6.Updateready:在重新下载完毕,这个事件被触发,意味着新的离线版本准备被使用
说明:为什么要在本页加个iframe呢?
我们设置的需要缓存的文件都会缓存,而且引用manifest的那个页面也被缓存了。这个很重要,这个是manifest的机制,它除了会缓存设置好的文件之外,还会缓存当前引用manifest文件的页面。这样我在修改当前页面内容的时候,浏览器端不会有变化,如果我不想缓存当前页面,我想在当前页面修改后,立马看到效果,怎么办?加入一个iframe引用cache页面,浏览器会缓存cache.html,不会缓存a.html页面。
5.疑问
我个人研究没有很深入,在FALLBACK中,如果写替换的跳转页面可以使用,但是写替换的css,图片等资源时,可以看到确实做了请求替换,但是页面并未出现效果,css未改,图片未显示出来,这里没有搞清原理,希望进行探讨。
W3CSCHOOL上的介绍:
相关推荐
- **缓存更新**:当manifest文件改变时,浏览器会自动下载新的资源并更新缓存,因此需要谨慎管理manifest文件的版本控制。 2. **Web Workers**: - **多线程处理**:Web Workers允许在后台线程中执行耗时的计算...
要在HTML5中使用应用程序缓存,需要在html标签中加入manifest属性指向一个manifest文件。例如: <html manifest="cache.manifest"> 然后,在这个manifest文件中,定义缓存规则。一个基本的manifest文件包含三个...
总结,安卓HTML5文件管理器案例展示了如何利用HTML5技术构建一个轻量级、跨平台的文件管理系统,结合安卓的Webview组件,实现了与原生应用相媲美的用户体验。这种开发模式具有灵活性高、更新快速等优点,适用于开发...
jQuery Manifest插件,简称为jquery-manif,是用于管理和优化前端资源加载的工具,特别是针对使用HTML5 Application Cache(AppCache)的应用。AppCache是一种离线存储机制,允许网页在离线状态下也能访问,提高了...
通过这个HTML5 Web存储和缓存技术的简单案例,我们可以学习如何有效地利用这些技术来优化Web应用的性能,提升用户体验,同时了解它们的原理和应用场景。对于初学者来说,这是一个很好的起点,可以帮助他们更好地理解...
修改后的`clock.html`文件添加了`manifest`属性,指向manifest文件,启动了离线缓存过程。 离线状态检测是另一个重要的方面。HTML5提供了`navigator.onLine`属性来检测浏览器当前是否在线。开发者可以监听`online`...
6. **Web App Manifest**:在创建Web应用程序时,manifest文件可以指示哪些资源应该被缓存,哪些资源需要在线使用。更新manifest文件也能触发Service Worker的更新,进而更新缓存。 7. **前端构建工具**:像Webpack...
这项技术的核心在于利用HTML5的`Application Cache`(应用缓存)或者称为`Cache Manifest`(缓存清单),通过创建一个清单文件来指定需要离线存储的资源。 **一、离线存储的必要性** 随着移动设备的普及,用户可能...
`manifestapp`这个示例就是展示如何利用HTML5的`<html manifest>`属性来创建一个离线可访问的应用。我们将详细探讨这个过程及其相关知识点。 首先,`<html manifest>`属性是HTML5引入的新特性,用于指定一个名为`...
这主要依赖于HTML5的`Application Cache`(应用程序缓存),也就是我们常说的manifest文件。 `Application Cache`允许开发者创建一个包含必需资源的清单,如HTML、CSS、JavaScript文件及图片等,这些资源会被浏览器...
为了实现更复杂的应用程序逻辑,如数据存储和同步,开发者需要利用HTML5的`localStorage`或`IndexedDB`来保存用户数据,并监听`online`和`offline`事件,以便在联网状态变化时进行数据同步。 总的来说,HTML5离线...
综上所述,通过合理地修改manifest文件版本、利用JavaScript更新缓存,或者采用Service Worker和HTTP头部控制,我们可以有效地解决HTML5离线存储中资源更新的问题,确保用户始终访问到最新的内容。
- **离线地图**:地图应用可以利用HTML5离线处理,预先缓存一部分地图区域,让用户在无网络环境下仍能查看地图。 - **阅读应用**:电子书或新闻阅读应用可以缓存文章,让用户离线时也能阅读已加载的内容。 - **...
1. **首次加载**:当浏览器首次加载带有manifest属性的HTML页面时,它会根据manifest文件下载所有需要缓存的资源。 2. **Cache加载**:如果manifest文件没有变化,则浏览器直接使用缓存中的资源。 3. **更新加载**:...
关键机制是利用HTML5的`Application Cache`(也称为离线存储)功能,通过一个manifest文件指定要缓存的资源。 2. **浏览器与服务器的交互**:浏览器首次加载一个支持离线应用的网页时,会下载manifest文件,并根据...
要创建一个清除缓存的扩展,我们需要编写一个manifest.json文件来定义扩展的基本信息,包括权限、背景脚本等。 在`manifest.json`文件中,我们需要声明以下权限: ```json { "manifest_version": 2, "name": ...
HTML5全景播放器是一种利用HTML5技术实现的虚拟现实(VR)体验的播放工具,它允许用户通过浏览器浏览和互动360度全景图像或视频。这种播放器通常结合JavaScript库,如本例中的"rmpano.js",来处理交互逻辑和渲染全景...
一种常见方法是使用HTML5的App Cache特性,通过manifest文件指定需要缓存的资源。 五、优化策略 1. 设置合适的缓存大小:根据应用需求设置磁盘缓存的最大容量,避免过多占用用户存储空间。 2. 使用Service Worker:...
2. 应用程序缓存:通过manifest文件定义离线存储资源,实现离线应用。 3. Web App Manifest:定义应用程序图标、启动画面、主题色等,让网站看起来更像原生应用。 4. Service Worker:作为中间层,处理网络请求,...