h5应用实现离线缓存,加载后,断网仍然可以继续使用。

一、需求

转行做h5,目前做赛道游戏,动手做了个赛道编辑器web版的,由于web版需要开启服务器才能使用,策划要想回家使用就要发布到外网服务器了,特麻烦了。

h5 cache manifest 文件完美解决我的需求,让策划回家也能使用。

二、原理

使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。

HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。

应用程序缓存为应用带来三个优势:

  • 离线浏览 - 用户可在应用离线时使用它们。
  • 速度 - 已缓存资源加载得更快。
  • 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。

所有主流浏览器均支持应用程序缓存,除了 Internet Explorer。某些浏览器的支持的大小不一定,不过肯定都超过5M了。

三、实现

嵌入

在网站的index.html头部嵌入 cache manifest 文件:

<!DOCTYPE HTML>
<html manifest="app.manifest">
<head>
<meta charset="utf-8">
<title>Game</title>
……
</head>
</html>

cache manifest 文件加上后,浏览器会去根据文件内的标记,去服务器请求资源,如果无法连接服务器,将直接使用本地文件缓存。如果服务器的cache manifest 文件有变更,则浏览器会重新请求所有的资源。

Manifest文件

manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。

manifest 文件可分为三个部分:

  • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
  • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
  • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

更新缓存

一旦应用被缓存,它就会保持缓存直到发生下列情况:

  • 用户清空浏览器缓存
  • manifest 文件被修改,一般我会设置一个版本号、及生成时间来实现重新更新。
  • 由程序来更新应用缓存

一旦被缓存后,除非修改manifest文件,否则不会重新更新,即使已经修改了服务器上的其他资源。

栗子

index.html 同级的 app.manifest 文件

CACHE MANIFEST
# Time: Fri May 27 2016 19:44:17 GMT+0800 (中国标准时间) CACHE:
index.html
main.min.js
resource/default.res.json
resource/default.thm.json
resource/favicon.ico NETWORK:
* SETTINGS:
prefer-online # hash: 2b6fc415e3a2ce3122fab5e1deb79f87474807bf0eb2d77d1875f6858675a1de

四、自动化Manifest

人类都是在进步的哈,手动一个一个文件加入 manifest 文件,那不是要死人了么?当然也有自动化啦!

gulp-manifest

下面内容在我的github上ManifestTool

要想使用上面的工具,首先要安装 nodejs

然后在当前目录下安装依赖包:

npm install

安装成功后,在当前目录下查看版本:

gulp -v

[10:11:00] CLI version 3.9.0

[10:11:00] Local version 3.9.1

把项目放入public文件夹内,并执行 命令:

win 下执行 build.bat

mac 下在当前目录下执行 gulp build ,如下

[10:08:33] Using gulpfile ~/Documents/GitClonePro/ManifestTool/gulpfile.js

[10:08:34] Starting 'build'...

[10:08:34] Finished 'build' after 6.92 ms

成功后会在public目录内生成一个 app.manifest文件。

在项目的index.html头部引用此文件,如下:

<!DOCTYPE HTML>
<html manifest="app.manifest">
<head>
<meta charset="utf-8">
<title>Game</title>
……
</head>
</html>

完成,直接把 public 内所有文件直接拷贝到自己的web服务器上即可。

快去尝试一下吧。

五、进阶美化

上面完成的只是让策划能离线使用,但是这还不够美,要能收藏到本地桌面才好,要能在桌面显示自定义icon才好。

ok,下面实现在iphone的Safari上实现。

<!-- Standard iPhone -->
<link rel="apple-touch-icon" sizes="57x57" href="./resource/touch-icon-iphone-114.png" />
<!-- Retina iPhone -->
<link rel="apple-touch-icon" sizes="114x114" href="./resource/touch-icon-iphone-114.png" />
<!-- Standard iPad -->
<link rel="apple-touch-icon" sizes="72x72" href="./resource/touch-icon-iphone-144.png" />
<!-- Retina iPad -->
<link rel="apple-touch-icon" sizes="144x144" href="./resource/touch-icon-iphone-144.png" />

制作两个icon图片,尺寸为 114X114 和 144X144,网上一堆工具可以转换。

把上面的标签嵌入index.html中

<!DOCTYPE HTML>
<html manifest="app.manifest">
<head>
<meta charset="utf-8">
<title>Game</title>
<!-- Standard iPhone -->
<link rel="apple-touch-icon" sizes="57x57" href="./resource/touch-icon-iphone-114.png" />
<!-- Retina iPhone -->
<link rel="apple-touch-icon" sizes="114x114" href="./resource/touch-icon-iphone-114.png" />
<!-- Standard iPad -->
<link rel="apple-touch-icon" sizes="72x72" href="./resource/touch-icon-iphone-144.png" />
<!-- Retina iPad -->
<link rel="apple-touch-icon" sizes="144x144" href="./resource/touch-icon-iphone-144.png" />
</head>
</html>

通过手机打开web,点击加入书签,你会发现多了icon 显示,选择收藏到桌面,会在桌面生成一个icon,直接点击这个icon可以直接体验原生app的效果。

h5应用缓存及收藏时Icon显示的更多相关文章

  1. H5的缓存 manifest

    H5里面的App Cache是由开发Web页面的开发者控制的,而不是由Native去控制的,但是Native里面的WebView也需要我们做一下设置才能支持H5的这个特性. 1.工作原理 写Web页面 ...

  2. 如何实现Selenium自动化读取H5手机缓存

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6890675.html 前言: 由于Se ...

  3. 自动化测试系列:如何实现Selenium自动化读取H5手机缓存

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6890675.html 前言: 由于Se ...

  4. H5离线缓存技术Application Cache

    H5离线缓存技术Application Cache 1.离线缓存技术:是浏览器本身的一种机制 HTML5引入Application Cache(应用程序缓存)技术,离线存储可以将站点的一些文件存储在本 ...

  5. Atitit.播放系统规划新版本 and 最近版本回顾 v3  pbf.doc  1 版本11 (ing)41.1 规划h5本地缓存系列 41.2 Android版本app41.3 双类别系统,

    Atitit.播放系统规划新版本 and 最近版本回顾 v3  pbf.doc 1 版本11 (ing)4 1.1 规划h5本地缓存系列 4 1.2 Android版本app4 1.3 双类别系统, ...

  6. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

    转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...

  7. h5 离线缓存小demo

    传统的web应用是在线应用,这其实也是web的特色,对于PC时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得更低.比如:在火车上,穿山越岭进隧道,便无法访问w ...

  8. h5的缓存机制

    H5的缓存,大概有localstorage.sessionstorage.cookie和manifest. 一.LocalStorage LocalStorage是永久性的本地缓存,存储在客户端的浏览 ...

  9. H5 离线缓存的用法

    H5离线缓存基础系列   1.什么是离线缓存 离线缓存:离线缓存可以将站点的一些文件缓存到本地,它是浏览器自己的一种机制,将需要的文件缓存下来,以便后期即使没有连接网络,被缓存的页面也可以展示. 2. ...

随机推荐

  1. DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享

    DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...

  2. 工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!

    如有需要WPF工具的朋友可以移步 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATI ...

  3. Partition:Partiton Scheme是否指定Next Used?

    在SQL Server中,为Partition Scheme多次指定Next Used,不会出错,最后一次指定的FileGroup是Partition Scheme的Next Used,建议,在执行P ...

  4. IE的F12开发人员工具不显示问题

    按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全屏出现 ...

  5. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  6. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

  7. Linux常用指令指南,终端装逼利器

    最近搞了台Macbook Pro,就学习了一下Linux命令,在网上查了些资料,看了本书叫<快乐的 Linux 命令行>,里面涉及到了各个方面的命令. 在此将常用的整理出来,以备将来使用. ...

  8. [原] KVM 虚拟化原理探究(4)— 内存虚拟化

    KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...

  9. The Zen of Python

    Beautiful is better than ugly. 优美总比丑陋好Explicit is better than implicit. 直率总比含蓄好Simple is better than ...

  10. 无法访问org.springframework.core.NestedRuntimeException 找不到org.springframework.core.NestedRuntimeException的类文件

    在学习springAOP时,出现如下异常: 无法访问org.springframework.core.NestedRuntimeException 找不到org.springframework.cor ...