利用Node實(shí)現(xiàn)HTML5離線存儲(chǔ)的方法

前言
支持離線Web應(yīng)用開(kāi)發(fā)是HTML5的一個(gè)重點(diǎn)。離線Web應(yīng)用就是在設(shè)備不能上網(wǎng)的時(shí)候仍然可以運(yùn)行的應(yīng)用。開(kāi)發(fā)離線Web應(yīng)用需要幾個(gè)步驟,其中一個(gè)就是離線下必須能訪問(wèn)一定的資源(圖像 JS css等)
HTML5引入了應(yīng)用程序緩存,這意味著 web 應(yīng)用可進(jìn)行緩存,并可在離線時(shí)進(jìn)行訪問(wèn)。
:pushpin:應(yīng)用程序緩存為應(yīng)用帶來(lái)三個(gè)優(yōu)勢(shì):
- 離線瀏覽 – 用戶可在應(yīng)用離線時(shí)使用它們
- 速度 – 已緩存資源加載得更快
- 減少服務(wù)器負(fù)載 – 瀏覽器將只從服務(wù)器下載更新過(guò)或更改過(guò)的資源。
原理和環(huán)境
- 在線的情況下, 當(dāng)瀏覽器渲染到
<html manifest="test.manifest">
時(shí),會(huì)發(fā)出一個(gè)請(qǐng)求,請(qǐng)求獲取test.manifest
文件 ,如果是第一次訪問(wèn),那么瀏覽器就會(huì)根據(jù) 描述文件(manifest 文件)中(CACHE MANIFEST)的內(nèi)容下載相應(yīng)的資源并且進(jìn)行離線存儲(chǔ)。如果已經(jīng)訪問(wèn)過(guò)并且資源已經(jīng)離線存儲(chǔ)了,那么瀏覽器就會(huì)使用離線的資源加載頁(yè)面,然后瀏覽器會(huì)對(duì)比新的manifest
文件與舊的manifest
文件,如果文件沒(méi)有發(fā)生改變,就不做任何操作,如果文件改變了,那么就會(huì)重新下載文件中的資源并進(jìn)行離線存儲(chǔ)。 - :triangular_flag_on_post: 【注】 這個(gè)demo演示是為了更深的了解這個(gè)原理
- 離線的情況下,瀏覽器就直接使用離線存儲(chǔ)的資源
- 就像cookie一樣,HTML5的離線存儲(chǔ)也需要服務(wù)器環(huán)境,這個(gè)demo中服務(wù)端基于Node.js、Express框架和art-tmplate開(kāi)發(fā)
描述文件
要想在緩存中保存數(shù)據(jù),需要使用描述文件manifest 文件,列出要下載和緩存的資源
manifest 文件可分為三個(gè)部分:
- CACHE MANIFEST - 在此標(biāo)題下列出的文件將在首次下載后進(jìn)行緩存
- NETWORK - 在此標(biāo)題下列出的文件需要與服務(wù)器的連接,且不會(huì)被緩存
- FALLBACK - 在此標(biāo)題下列出的文件規(guī)定當(dāng)頁(yè)面無(wú)法訪問(wèn)時(shí)的回退頁(yè)面(比如 404 頁(yè)面)
- 在線的情況下,用戶代理每次訪問(wèn)頁(yè)面,都會(huì)去讀一次manifest.如果發(fā)現(xiàn)其改變, 則重新加載全部清單中的資源
結(jié)構(gòu)
:triangular_flag_on_post: 【注意】 所有的你想讓瀏覽器緩存的資源放在public靜態(tài)資源文件夾中
服務(wù)端環(huán)境的搭建
npm init //生成package.json說(shuō)明書(shū)文件 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離線存儲(chǔ)</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>
結(jié)果
開(kāi)啟服務(wù)端后:
關(guān)閉服務(wù)端后:
改變 manifest
后 再次連接服務(wù)器
CACHE MANIFEST #v01 /public/image/01.jpg /public/index.css NETWORK: * FALLBACK: /
:triangular_flag_on_post: 【注】 看圖右邊控制端的輸出,因?yàn)楦淖兞薽anifest文件,瀏覽器會(huì)對(duì)比新的 manifest 文件與舊的 manifest 文件,發(fā)現(xiàn)文件改變了,那么就會(huì)重新下載文件中的資源并進(jìn)行離線存儲(chǔ)
再次關(guān)閉服務(wù)端后:
到此這篇關(guān)于利用Node實(shí)現(xiàn)HTML5離線存儲(chǔ)的文章就介紹到這了,更多相關(guān)HTML5離線存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 這篇文章主要介紹了H5離線存儲(chǔ)Manifest原理及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)2020-04-28
HTML5中的網(wǎng)絡(luò)存儲(chǔ)實(shí)現(xiàn)方式
傳統(tǒng)方式使用document.cookie來(lái)進(jìn)行存儲(chǔ),但是由于其存儲(chǔ)的空間只有4KB左右,并且需要復(fù)雜的操作進(jìn)行解析,給發(fā)開(kāi)者帶來(lái)很多不便,為此,HTML5規(guī)范提出了網(wǎng)絡(luò)存儲(chǔ)的解決方2020-04-28使用HTML5 IndexDB存儲(chǔ)圖像和文件的示例
這篇文章主要介紹了使用HTML5 IndexDB存儲(chǔ)圖像和文件的示例的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-05HTML5離線應(yīng)用與客戶端存儲(chǔ)的實(shí)現(xiàn)
這篇文章主要介紹了HTML5離線應(yīng)用與客戶端存儲(chǔ)的實(shí)現(xiàn)的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-03HTML5 本地存儲(chǔ)實(shí)現(xiàn)購(gòu)物車功能
這篇文章主要介紹了HTML5 本地存儲(chǔ)實(shí)現(xiàn)購(gòu)物車功能的相關(guān)資料,需要的朋友可以參考下2017-09-07在HTML5 localStorage中存儲(chǔ)對(duì)象的示例代碼
這篇文章主要介紹了在HTML5 localStorage中存儲(chǔ)對(duì)象的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-20