h5 离线缓存

由于在生活中,经常会遇到有些时候手机没有信号没有网络什么的,就访问不了应用了,但是我们应用有很多东西又是不怎么变化的,所以这两天看了下有关离线缓存方面的文章,自己简单实现了下:
网上都是tomcat的方式的,我使用的是nodejs的方式。
1.创建index.html

<!DOCTYPE html>
<html lang="en" manifest="/cache/demo.appcache"> 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>测试缓存</title>
</head>
<body>
    <h2>文件缓存测试12345</h2>
    <a href="./a.html">去新页面</a>
    <img src="/public/1.png" alt="">
    <img src="/public/2.png" alt="">
</body>
<script>
    applicationCache.onupdateready = function() {  
        if (confirm("本地缓存已被更新,需要刷新页面来获取应用程序最新版本")) {  
            //手动更新本地缓存,只能在onupdateready事件触发时调用  
            applicationCache.swapCache();  
            location.reload();  
        }  
    }  
</script>
</html>

其中看到第一行<html lang="en" manifest="/cache/demo.appcache">,manifest的属性值是缓存的菜单文件,看看里面写的是什么:

CACHE MANIFEST
# v1.0.7

CACHE:
/public/index.html
/public/a.html
/public/1.png

NETWORK: 
/public/2.png

CACHE MANIFEST是必选的,CACHE是需要缓存的资源(可选),NETWORK是需要网络加载的资源(可选),因为浏览器解析到index.html的第一行时,会去读这份缓存清单,先看该清单与没有改变,没有改变则使用缓存中的文件,否则更新缓存刷新页面,流程是这样的:

缓存流程

然后还有最重要的一步是:demo.appcache的返回首部字段mime必须是text/cache-manifest,如果你用PC端访问的的话,记得不要勾选disable cache选项
不要勾选disable cache选项

你会发现,在你的缓存中会有这些东西:
image.png

你此时把服务给关掉或者网络断掉就会发现还依然可以访问网页,但是b.png无法访问,因为他没有被缓存下来。
下面是浏览器对h5离线缓存的支持情况
h5离线缓存支持情况

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近被问到你会离线缓存吗,一头雾水,所以决定自己写一个demo来验证一些, 准备工作:把demo放到了nginx服...
    竿牍阅读 5,429评论 2 3
  • 转载:H5缓存机制浅析-移动端Web加载性能优化【干货】 作者:贺辉超,腾讯游戏平台与社区产品部 高级工程师 目录...
    meng_philip123阅读 13,964评论 6 48
  • 起源 大部分的网页,必须联网才能访问,这其实也是web的特色,但对于现在的移动互联网时代,设备终端位置不再固定,依...
    白水螺丝阅读 7,380评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,224评论 19 139
  • Html5 引入了应用程序缓存,这意味着web应用可以进行缓存,并且可以在没有网络连接的时候进行访问。1.1 什么...
    Victor细节阅读 9,683评论 0 0

友情链接更多精彩内容