开发离线应用的缓存方法大概有4种(如下safari开发工具中的resources所示)

1.cookies(略):传统储存策略。缺点很明显:储存的容量过小,而且很容易被各种软件当垃圾清除,如360等。

2.Application Cache资源缓存:在html中指定一个manifest文件,给文件中罗列出需要缓存的资源文件列表。浏览器根据资源列表对资源文件缓存。

3.Dom Storage:这一种基于key/value的格式。

DOM Storage 分为两类:sessionStorage 和 localStorage。除了以下区别外,这两类存储对象的功能是完全一致的。

  1. sessionStorage 用于存储与当前浏览器窗口关联的数据。窗口关闭后,sessionStorage 中存储的数据将无法使用。
  2. localStorage 用于长期存储数据。窗口关闭后,localStorage 中的数据仍然可以被访问。所有浏览器窗口可以共享 localStorage 的数据.
4.web sql Databases:除了 DOM Storage 以外,HTML5 中还有另外一种数据存储方式 Web SQL Database。它提供了基本的关系数据库功能,支持页面上的复杂的、交互式的数据存储。它既可以用来存储用户产生的数据,也可以作为从服务器获取数据的本地高速缓存。例如可以把电子邮件、日程等数据存储到数据库中。Web SQL Database 支持数据库事务的概念,从而保证了即使多个浏览器窗口操作同一数据,也不会产生冲突。
示例:(这才是重点啊!)
目前我只尝试过Application Cache,所以也只给出这个例子。
开发环境:Apache+php+(windows下的safari,chrome,firefox)/ipod touch下的safari
目的:缓存我指定的index.html和其中的jquery.js资源文件。index.html中的图片不缓存。
文件目录分布如下:
/jqueryapp/
---------------------------------------------
1.index.html
2.jquery.js
3.tetris.php(可能大家觉得这个文件很奇怪,其实是用来发送manifest的mime type的。不然就要修改apache的mime.types或者用.htaccess,很多人没有这个条件,比如我)
4.tetris.manifest
---------------------------------------------
index.html代码
[plain] view plaincopy
  1. <!DOCTYPE html>
  2. <html manifest="tetris.php">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
  7. <meta name="apple-mobile-web-app-capable" content="yes" />
  8. <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  9. <link rel="apple-touch-icon" href="iphon_tetris_icon.png"/>
  10. <link rel="apple-touch-startup-image" href="startup.png" />
  11. <title>appdig</title>
  12. <script src="jquery.js"></script>
  13. <span style="white-space:pre">    </span><style type="text/css">
  14. <span style="white-space:pre">        </span>body,div,ul,li,p,span,img{
  15. <span style="white-space:pre">    </span>margin:0px;
  16. <span style="white-space:pre">    </span>padding:0px;
  17. <span style="white-space:pre">    </span>}……

<!DOCTYPE html>是用来声明它是一个html5文档。

<html manifest="tetris.php">加上 manifest="tetris.php"来指定资源列表文件。tetris.php就是指定需要缓存的资源文件列表。
tetris.php代码
[plain] view plaincopy
  1. <?php
  2. header('Content-Type: text/cache-manifest');
  3. readfile('tetris.manifest');

先发送header头部,确定这是一个text/cache-manifest类型文件。再把tetris.manifest中的列表都进来。

tetris.manifes代码
[plain] view plaincopy
  1. CACHE MANIFEST
  2. index.html
  3. jquery.js
有些文章说包涵manifest的html可以不用写自身。我试了,不写真的也可以。
再说说manifest的书写规则吧。
第一行必须写上CACHE MANIFEST,然后每个资源文件一行,注释用#。
后记:关于manifest的mime type声明
html5提供的这种方法必须保证<html manifest="文本文件">中的文本文件(任意名字和任意扩展名)是text/cache-manifest类型的。即其header必须声明其类型是text/cache-manifest的。
其实如果你有修改apache服务器或者别的web服务器的权限你完全可以不用tetris.php这个文件。在index.html中的直接用 <html manifest="tetris.manifest">就可以。
修改apache的mime.types配置文件,在其中加上下面这句。

text/cache-manifest            manifest

或者用.htaccess,加添下面那句(我没尝试)。
AddType text/cache-manifest用我上面的方法的好处就是不用修改和添加任何配置文件。利用php来发送header来告诉浏览器我是text/cache-manifest类型的。
参考资料:
1.http://www.ibm.com/developerworks/cn/web/1011_guozb_html5off/  非常的详细讲解了离线应用的储存策略
2.http://www.qianduan.net/local-storage-of-html5.html
3.http://www.yiiyaa.net/1414 详细讲了manifest的用法
4.http://www.zzbaike.com/wiki/Htaccess 讲了.htaccess的用法

WebApp本地存储 (离线缓存策略策略)相关推荐

  1. IndexedDB浏览器本地存储、缓存、数据库、介绍

    目录 1.前言 2.IndexedDB简介 3.IndexedDB使用场景 4.IndexedDB特点 4.1.非关系型数据库 NoSql 4.2.持久化存储 4.3.异步操作 4.4.支持事务 4. ...

  2. HTML5基础扩展——地理位置、本地存储、缓存

    HTML5扩展,继上两篇博客,我们来看一下HTML5的一些扩展的功能,由于HTML5更多是为了兼容电脑浏览器,安卓浏览器,苹果浏览器更多浏览器,或者说为这些浏览器提供一个统一的标准.因此目前在手机上的 ...

  3. WebStorage之浏览器的本地存储(结合案例)

    目录 前言 一,WebStorage 二,localStorage 2.1 存储 2.2 读取 2.3 删除 2.4 清除全部 2.5 代码 三,sessionStorage 3.1 用法 3.2 区 ...

  4. 离线缓存占内存吗_彻底弄懂浏览器缓存策略

    浏览器缓存策略对于前端开发同学来说不陌生,大家都有一定的了解,但如果没有系统的归纳总结,可能三言两语很难说明白,甚至说错,尤其在面试过程中感触颇深,很多候选人对这类基础知识竟然都是一知半解,说出几个概 ...

  5. 本地存储和离线缓存的作用和区别

    前言 前端的存储方式有:localStorage.sessionStorage.cookie.UserData.webSQL.indexeddb.HTML5离线存储等.各个存储方式有各自的优缺点,本文 ...

  6. 浏览器,渲染,页面优化,存储,缓存,同源策略,跨域问题

    一.浏览器渲染 1.浏览器渲染原理 原文链接:https://blog.csdn.net/qq_45952585/article/details/124069123前端项目性能优化方案有哪些_前端性能 ...

  7. app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览

    ylerjen.. 17 AppCache使用清单文件来定义应用程序应该存储哪些文件(您可以缓存文件和资源,如HTML页面,JS脚本,CSS样式,图像......) LocalStorage将存储数据 ...

  8. 三种本地存储策略的区别

    前端常用的三种本地存储策略是什么呢? cookie sessionStorage localStorage cookie 在 h5 之前,本地存储的主要方式就是 cookie ,cookie可以实现少 ...

  9. openfire client聊天消息交互和存储离线(在线)消息记录策略

    [0]如何将离线消息存档,且在接收者上线之后,推送消息到接收者 发送方发送消息 -> 检测接收方是否在线 -> -> y -> 发送在线消息 -> 发送成功后,存档到消息 ...

最新文章

  1. python 通过shutil.move移动图片出错xe5\xb8\xb8\xe7
  2. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170412
  3. 思考一下消息中间件的设计
  4. python先返回再处理_python xpath解析返回对象怎么处理
  5. php使用hset报错,redis中set和hset的区别和使用场景
  6. SizeClass和Autolayout
  7. ThreatARMOR添加零日恶意软件防御功能
  8. 电商需求分析mysql建表_电商-专题表 - 数据库设计 - 数据库表结构 - 果创云
  9. AccuMark 7.6.2 格柏服装软件
  10. Kafka实战之整合Flume和Kafka完成实时数据采集
  11. lot物联网场景通用架构分享
  12. ColorPix 简单好用的屏幕取色小工具
  13. 小米手机电池恢复代码_小米手机隐藏技巧,你真的会用吗?别再浪费如此强大的功能了...
  14. 51nod 1534 棋子游戏(博弈)
  15. mac下解决无法往U盘内复制文件的问题
  16. matter.js学习笔记(八)--Composites.newtonsCradle()制造牛顿摆
  17. 基于虚拟机的VxWorks实验平台设计与实现(读研时的一篇论文)
  18. 聊聊旷厂黑科技 | 五彩斑斓的黑,旷视“算”出来了!
  19. java实现图片的压缩且保留图片尺寸不变
  20. API 接口大全之 1688

热门文章

  1. 关于dorado的存储问题
  2. [导入]浅析.Net下的AppDomain编程
  3. Android高级模糊技术RenderScript和FastBlur
  4. iptables 防火墙(上)
  5. 微信小程序手机预览不正常,打开手机调试后预览正常
  6. node汉字拼音转换需要用到pinyin包,使用pinyin中的分词时报错提示需要安装nodejieba依赖...
  7. mybatis基础(一)
  8. 从github克隆内容到本地时权限问题
  9. CapsLock Enhancement via AutoHotKey
  10. 十四个值得推荐的个人提升方法