利用Node實現HTML5離線存儲

前言

支持離線Web應用開發是HTML5的一個重點。離線Web應用就是在設備不能上網的時候仍然能夠運行的應用。開發離線Web應用須要幾個步驟,其中一個就是離線下必須能訪問必定的資源(圖像 JS css等)css

HTML5引入了應用程序緩存,這意味着 web 應用可進行緩存,並可在離線時進行訪問。html

📌應用程序緩存爲應用帶來三個優點:web

  • 離線瀏覽 – 用戶可在應用離線時使用它們
  • 速度 – 已緩存資源加載得更快
  • 減小服務器負載 – 瀏覽器將只從服務器下載更新過或更改過的資源。

原理和環境

  • 在線的狀況下, 當瀏覽器渲染到 <html manifest="test.manifest"> 時,會發出一個請求,請求獲取 test.manifest 文件 ,若是是第一次訪問,那麼瀏覽器就會根據 描述文件(manifest 文件)中(CACHE MANIFEST)的內容下載相應的資源而且進行離線存儲。若是已經訪問過而且資源已經離線存儲了,那麼瀏覽器就會使用離線的資源加載頁面,而後瀏覽器會對比新的 manifest 文件與舊的 manifest 文件,若是文件沒有發生改變,就不作任何操做,若是文件改變了,那麼就會從新下載文件中的資源並進行離線存儲。
    🚩 【注】 這個demo演示是爲了更深的瞭解這個原理
  • 離線的狀況下,瀏覽器就直接使用離線存儲的資源
  • 就像cookie同樣,HTML5的離線存儲也須要服務器環境,這個demo中服務端基於Node.js、Express框架和art-tmplate開發

描述文件

要想在緩存中保存數據,須要使用描述文件manifest 文件,列出要下載和緩存的資源express

manifest 文件可分爲三個部分:npm

  • CACHE MANIFEST - 在此標題下列出的文件將在首次下載後進行緩存
  • NETWORK - 在此標題下列出的文件須要與服務器的鏈接,且不會被緩存
  • FALLBACK - 在此標題下列出的文件規定當頁面沒法訪問時的回退頁面(好比 404 頁面)
  • 在線的狀況下,用戶代理每次訪問頁面,都會去讀一次manifest.若是發現其改變, 則從新加載所有清單中的資源

結構


🚩 【注意】 全部的你想讓瀏覽器緩存的資源放在public靜態資源文件夾中json

服務端環境的搭建

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>

結果

開啓服務端後:

服務器

關閉服務端後:
cookie

改變manifest後 再次鏈接服務器

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

NETWORK:
*

FALLBACK:
/


🚩 【注】看圖右邊控制端的輸出,由於改變了manifest文件,瀏覽器會對比新的 manifest 文件與舊的 manifest 文件,發現文件改變了,那麼就會從新下載文件中的資源並進行離線存儲

再次關閉服務端後:

相關文章
相關標籤/搜索