利用Node实现HTML5离线存储的方法


Posted in HTML / CSS onOctober 16, 2020

前言

支持离线Web应用开发是HTML5的一个重点。离线Web应用就是在设备不能上网的时候仍然可以运行的应用。开发离线Web应用需要几个步骤,其中一个就是离线下必须能访问一定的资源(图像 JS css等)

HTML5引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在离线时进行访问。

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

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

原理和环境

  • 在线的情况下, 当浏览器渲染到 <html manifest="test.manifest"> 时,会发出一个请求,请求获取 test.manifest 文件 ,如果是第一次访问,那么浏览器就会根据 描述文件(manifest 文件)中(CACHE MANIFEST)的内容下载相应的资源并且进行离线存储。如果已经访问过并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
  • :triangular_flag_on_post: 【注】 这个demo演示是为了更深的了解这个原理
  • 离线的情况下,浏览器就直接使用离线存储的资源
  • 就像cookie一样,HTML5的离线存储也需要服务器环境,这个demo中服务端基于Node.js、Express框架和art-tmplate开发

 描述文件

要想在缓存中保存数据,需要使用描述文件manifest 文件,列出要下载和缓存的资源

manifest 文件可分为三个部分:

  • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
  • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
  • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
  • 在线的情况下,用户代理每次访问页面,都会去读一次manifest.如果发现其改变, 则重新加载全部清单中的资源

结构

利用Node实现HTML5离线存储的方法 

:triangular_flag_on_post: 【注意】 所有的你想让浏览器缓存的资源放在public静态资源文件夹中

服务端环境的搭建

npm init //生成package.json说明书文件
npm i express //安装express包
npm i --save art-template express-art-template //使用art-tmplate
// 入口文件app.js
var express = require("express");
var app = express();
app.use('/public/', express.static('./public/'))
app.engine('html', require('express-art-template'));
app.get('/', function (req, res) {
  res.render('index.html');
});
app.listen(3000, function () {
  console.log("app is running at port 3000.");
});

其它

offline.appcache描述文件

CACHE MANIFEST
#v01
/public/image/01.jpg //缓存第一张图片

NETWORK:
*

FALLBACK:
/

index.html

<!DOCTYPE html>
<html lang="en" manifest="../public/offline.appcache">

<head>
  <meta charset="UTF-8">
  <title>HTML5离线存储</title>
  <link rel="stylesheet" href="../public/index.css">
</head>

<body>
  <img src="../public/image/01.jpg" alt="">
  <img src="../public/image/02.jpg" alt="">
</body>

</html>

结果

开启服务端后:

利用Node实现HTML5离线存储的方法利用Node实现HTML5离线存储的方法

关闭服务端后:

利用Node实现HTML5离线存储的方法

改变 manifest 后 再次连接服务器

CACHE MANIFEST
#v01
/public/image/01.jpg
/public/index.css

NETWORK:
*

FALLBACK:
/

利用Node实现HTML5离线存储的方法 

:triangular_flag_on_post: 【注】 看图右边控制端的输出,因为改变了manifest文件,浏览器会对比新的 manifest 文件与旧的 manifest 文件,发现文件改变了,那么就会重新下载文件中的资源并进行离线存储

再次关闭服务端后:

利用Node实现HTML5离线存储的方法

到此这篇关于利用Node实现HTML5离线存储的文章就介绍到这了,更多相关HTML5离线存储内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
May 07 HTML / CSS
基于CSS3实现的黑色个性导航菜单效果
Sep 14 HTML / CSS
css3 border旋转时的动画应用
Jan 22 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
Apr 25 HTML / CSS
css3 column实现卡片瀑布流布局的示例代码
Jun 22 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
Sep 11 HTML / CSS
CSS3制作皮卡丘动画壁纸的示例
Nov 02 HTML / CSS
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
Dec 25 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
Apr 23 HTML / CSS
Html5获取高德地图定位天气的方法
Dec 26 HTML / CSS
Canvas 帧动画吃苹果小游戏
Aug 05 HTML / CSS
css3带你实现3D转换效果
Feb 24 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
Oct 12 #HTML / CSS
HTML5逐步分析实现拖放功能的方法
Sep 30 #HTML / CSS
移动端HTML5 input常见问题(小结)
Sep 28 #HTML / CSS
HTML5超文本标记语言的实现方法
Sep 24 #HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
Sep 23 #HTML / CSS
Html5之webcoekt播放JPEG图片流
Sep 22 #HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
Sep 16 #HTML / CSS
You might like
PHP实现事件机制实例分析
2015/06/26 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
Python 3.x 新特性及10大变化
2015/06/12 Python
Python字符串格式化
2015/06/15 Python
python中的数据结构比较
2019/05/13 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
爱情保证书范文
2014/02/01 职场文书
逃课上网检讨书
2014/02/20 职场文书
中学生演讲稿
2014/04/26 职场文书
单位消防安全责任书
2014/07/23 职场文书
2015年度保密工作总结
2015/04/24 职场文书
李强优秀员工观后感
2015/06/16 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL