上篇博客(在github上写个人简历——最简单却又不容易的内容罗列)介绍了我在github上放的一个个人在线简历,有朋友看了后告诉我一个很大缺陷,使用github挺慢的,每次看的时候都很慢,第一反应这问题我可解决不了,后来想到是否可以利用缓存,至少第二次看的时候会快一些,但缓存机制大部分依赖于浏览器,而且默认都用了,还是很慢,所以此路不通。

application cache

忽然灵光一现(原谅我愚笨,其实应该很快想到的),前段日子在看html5的东西,当时觉得application cache没有太大用处,又肤浅了,用在这个需求实在太合适了。那么是什么是application cache呢?

application cache是html5引入的本地存储方案之一,和我们平常浏览器缓存类似,application cache在本地存储页面资源,我们先不用着急看application具体怎么使用,首先看看传统浏览器缓存有哪些问题。

一:浏览器缓存是不可靠的,我们不直到当前哪些资源被缓存,也不知道会被缓存多久,因为浏览器会随时因为空间或时间原因舍弃某些缓存,加入新的缓存文件。

二:虽然有浏览器缓存,但我们不能依赖浏览器缓存完全离线访问web

application cache解决了这两个主要问题,application cache允许开发者指定页面哪些资源需要被缓存,虽然也有空间大小限制,但是可以通过程序更改,可以控制缓存生命周期,安全可靠的让web离线使用,这么神奇,看看是怎么做到的吧

manifest 文件

要向使用application cache 需要为页面的html标签添加manifest属性,属性值是manifest文件路径,可以使用同源的绝对地址,也可以使用相对地址。

<!doctype html>
<html lang="zh" manifest="main.manifest">
</html>

application cache是通过mannifest文件来管理的,manifest文件是简单的文本文件,内容是需要被缓存供离线使用的文件列表,及不需要被缓存或读取缓存失败的文件控制。mannifest文件可以使用任意拓展名,但需要在服务器中添加MIME类型匹配,使用apache比较简单,如果使用.manifest作为拓展名在apache配置文件中添加

AddType text/cache-manifest .appcache

使用IIS的话通过界面找到添加MIME窗口添加即可

如何配置

下面是一个manifest文件的示例

main.manifest

 CACHE MANIFEST
#version 0.2.0
#date: Nov 24 2013 CACHE:
css/reset.css
css/main.css
js/jquery.js
images/bg.png
images/bg_hl.jpg
images/icons/yes.png
images/icons/top.png
offline.html NETWORK:
* FALLBACK:
index.html offline.html

1. 文件的第一行必须是 CACHE MANIFEST

2. #开头的行作为注释语句,所以文件中关于版本和日期都是注释,为了方便维护

3. 网站的缓存不能超过5M

4. 文件资源路径可以使用绝对路径也可以使用相对路径

5. 文件列表中任意一个缓存失败都会导致整个缓存失效,浏览器hui按没有application cache处理

6. 既可以站点使用同一个minifest文件,也可以每个页面使用一个

然后看一下CACHE、NETWORK、和FALLBACK三条指令语句

CACHE:指明需要缓存的资源文件,浏览器会自动缓存带有manifest属性的html页面,所以yinyongwmanifest文件的页面不用写在里面

NETWORK:不需要缓存的文件,名字就叫网络工作嘛,可以使用通配符

FALLBACK:无法访问缓存文件的备选文件,也可以使用通配符,上边例子的配置,读取不到index.html的话就会跳转至offline.html

看看效果

在在线简历中使用application cache后,访问一下

可以在控制台看看application cache,果真我们希望缓存的内容都被缓存了,试试离线好不好使,由于不知道github是不是支持及其定义的manifest文件拓展名是什么,只好在自己本地试试了,在电脑上配置好,用手机访问,然后断开手机网络,刷新一下。

刷新了八下依旧好使哎,手机离线也能看,就不截图了。当清除掉application cache并且关掉网络的时候,页面果真到了offline.html

更新

这样不依赖与浏览器的缓存机制也有个问题,怎么更新文件告知客户端呢,总不能永远使用一份缓存啊。简单的方法我们可以更新manifest文件,修改注释的版本号或者日期就可以,这样浏览器就会重新缓存文件,值得注意的是需要minifest文件本身更改(注释都可以),而缓存文件清单中的文件本身比如offline.html更新浏览器是不会重新缓存的。

这样我们修改了服务器的manifest文件后用户多刷几遍页面就可以了,但未免低级了一些,我们可以通过application cache 提供的接口来检查更新

application cache 在window上注册了一个applicationCache对象

status属性标明当前application cache状态

0:UNCACHED(未缓存)

1:IDEL(空闲的)

2:CHECKING(正在检查)

3:DOWNLOADING(正在下载)

4:UPDATEREADY(准备更新)

5:OBSOLETE (已过时)

另外对象有几个事件,看名字就能知道时做什么的。

对象有三个重要方法

update:尝试检查下载新application cache,当然得服务器更新了manifest文件才会下载

swapCache:当status变为UPDATEREADY时就可以更新本地application cache了

abort:取消正在进行的application cache更新

即使下载完新的缓存,也不意味这页面会更新,我们需要重新加载一次页面,可以通过这样的方式来使页面第一时间更新缓存

applicationCache.onupdateready=function(e) {
applicationCache.swapCache();
if (confirm('页面已更新,是否加载新内容?')) {
window.location.reload();
}
};

当然也可以设个轮询函数定时调用update方法检查更新,这里不演示了

最后

虽然没有如愿在github上使用application cache,但我已经把代码push到了我的github上,有兴趣同学可以down下来看看,了解到了application cache的使用也算是收获颇丰,小伙儿伴儿在你的个人主页上试试application cache吧。

html5 Application Cache——加快简历二次访问速度的更多相关文章

  1. Nginx manifest 实现 HTML5 Application Cache

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  2. HTML5 application cache

    Application Cache API (一) 基本应用 http://www.cnblogs.com/blackbird/archive/2012/06/12/2546751.html Appl ...

  3. html5 Application Cache 机制以及使用

    那什么是Application Cache呢? 顾名思义,AppCache就是对app内存缓存的方案,具体表现为当请求某个文件时不是从网络获取该文件,而是从本地内存中获取. Application C ...

  4. HTML5 Application cache初探和企业应用启示

    Application Cache 在自己做的开源项目( https://github.com/etoah/Lucien ) 用到了HTML5 的Application Cache,现总结如下: 目录 ...

  5. 【转】国内用户如何加快App Store的访问速度

    原文网址:http://www.app111.com/doc/100024206_1.html 作为国内互联网用户是比较可怜的,除了国外四大顶尖互联网服务不能访问外,就是App Store用得也比较痛 ...

  6. Application Cache

    轉發處:http://www.cnblogs.com/blackbird/archive/2012/06/12/2546751.html HTML5提供了一系列的特性来支持离线应用: applicat ...

  7. HTML5学习总结-08 应用缓存(Application Cache)

    一 应用缓存(Application Cache) 1 应用缓存 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: ...

  8. 转 html5离线储存,application cache,manifest使用体验

    html5离线应用application cache 最近在APP里新增一个论坛模块,为了快速地完成,决定将整个论坛模块做成WEB APP,WEB APP最致命的就是用户体验问题,页面跳转和过多的请求 ...

  9. HTML 5 应用程序缓存(Application Cache)cache manifest 文件使用 html5 中创建manifest缓存以及更新方法 一个manifest文件会创建一份缓存,不同的manifest文件其缓存的内容是互不干扰的

    HTML5 离线缓存-manifest简介 HTML 5 应用程序缓存 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. 什么是应用程序缓存(A ...

随机推荐

  1. 误打误撞写了段能让电脑奔溃的JS代码,但是自己不知道为什么,高手看到可以解答下吗?

    代码如下: <script> for(i=1;j=3*i;i++){ for(;j<=50;){ document.write(j+"<br>") } ...

  2. RBAC用户权限管理数据库设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  3. vc11(vs2012)下编译php

    需要原料: vs2012.php源码 1.本机的mingw没搞定,参考网上文章尝试vs2012编译,借助vs2012自带的命令行工具: 需要去bison官网下载bison.exe放在“c:/windo ...

  4. python 跨模块实现按照文件大小,日期实现日志分割,反转

    笔者的一个自动化测试平台项目,采用了python作为后端服务器语言.项目基于快速成型目的,写了一个极其简陋的日志记录功能,支持日志记录到文件和支持根据日志级别在终端打印不同颜色的log.但随着测试平台 ...

  5. myeclipse2014激活

    MyEclipse2014破解教程 一. 在破解myeclipse2014之前,要先把环境变量配置好: 1)打开我的电脑--属性--高级--环境变量 2)新建系统变量JAVA_HOME 和CLASSP ...

  6. 说说Python中的闭包 - Closure

    转载自https://segmentfault.com/a/1190000007321972 Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西 ...

  7. Win7 64下Visual C++ 6.0不兼容

    Win7 64下Visual C++ 6.0不兼容 安装VSE6.0: 1.运行setup.exe安装程序,会弹出如下的的 程序兼容性助手 提示框,这个是Win7在警告用户vc6存在兼容性问题:此程序 ...

  8. android ontouch事件分发机制

    最近开发一个项目中,banner图左右切换和下拉刷新手势有冲突,为此去研究了事件分发,网上资料一大抄,有些讲的不对有些讲的不全,结合了网上一些博文以及源码总结如下  一个完整的触摸事件包含down,m ...

  9. [Leetcode][JAVA] Path Sum I && II

    Path Sum Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addi ...

  10. 基于AutoCAD的ObjectARX之NET扩展(mcnetarx)-AcdbEntNext、AcdbEntLast

    1.AcdbEntLast用于获取最后一个创建的实体. 2.AcdbEntNext用于获取指定实体名称之后的下一个创建的实体. ' 定义保存实体名称的变量 Dim ent() As Integer = ...