NodeによるHTML5オフラインストレージ
プリアンブル
オフラインでのWebアプリケーション開発をサポートすることは、HTML5の重要な焦点です。オフライン ウェブ アプリとは、デバイスがインターネットに接続されていないときでも実行できるアプリのことです。オフラインのウェブアプリケーションを開発するにはいくつかのステップが必要ですが、そのうちの1つは、特定のリソース(画像、JS、CSSなど)がオフラインでアクセス可能でなければならないことです。
HTML5ではアプリケーションキャッシュが導入され、Webアプリケーションはキャッシュされ、オフラインの状態でもアクセスできるようになりました。
pushpin:appのキャッシュは、アプリに3つの利点をもたらします。
- オフラインブラウジング - ユーザーはアプリがオフラインの間、それらを使用することができます
- スピード - キャッシュされたリソースの読み込みを高速化
- サーバーの負荷軽減 - ブラウザは、更新または変更されたリソースのみをサーバーからダウンロードします。
原理と背景
-
オンラインの場合、ブラウザがレンダリングする際に
<html manifest="test.manifest">
を取得するための要求が行われます。test.manifest
ファイルを作成し、初回訪問であれば、ブラウザは記述ファイル(CACHE MANIFEST)の内容に基づいて適切なリソースをダウンロードし、オフラインで保存します。既に訪問済みで、リソースがオフラインに保存されている場合、ブラウザはオフラインのリソースを含むページを読み込み、ブラウザは新しいmanifest
ファイルを古いmanifest
ファイルに変更がなければ何もせず、変更があればファイル内のリソースを再ダウンロードし、オフラインで保存します。 - :triangular_flag_on_post: [注意事項】をご覧ください。] このデモは、原理をより深く理解するためのデモです
- オフラインの場合、ブラウザはオフラインで保存されたリソースを直接使用する
- HTML5のオフラインストレージは、クッキーと同様にサーバー環境が必要であり、このデモでは、サーバーサイドにNode.js、Expressフレームワーク、art-tmplateを利用しています
説明ファイル
キャッシュにデータを残すには、ダウンロードとキャッシュの対象となるリソースを列挙したマニフェストファイル(description file)を使用する必要があります
マニフェストファイルは、3つのセクションに分けることができます。
- CACHE MANIFEST - この見出しの下にリストされたファイルは、最初のダウンロードの後にキャッシュされます。
- NETWORK - この見出しの下にリストされているファイルは、サーバーへの接続を必要とし、キャッシュされません。
- FALLBACK - この見出しの下にリストされているファイルは、ページにアクセスできない場合(例:404ページ)のフォールバックページを指定するものです。
- オンラインの場合、ユーザーエージェントは、ページにアクセスするたびにマニフェストを一度読み取ります。変更を発見した場合、リソースのリスト全体を再読み込みします。
構造
:triangular_flag_on_postです。 [注意事項】をご覧ください。] ブラウザにキャッシュさせたいリソースは、すべて public static resources フォルダに配置します。
サーバーサイドの環境設定
npm init //generate package.json manual file
npm i express // install express package
npm i --save art-template express-art-template // use art-tmplate
// entry file 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 // Cache the first image
NETWORK:
*
FALLBACK:
/
index.html
<!DOCTYPE html>
<html lang="en" manifest=". /public/offline.appcache">
<head>
<meta charset="UTF-8">
<title>HTML5 offline storage</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>
結果
サーバーをオンにした状態
サーバーを閉じた後
変更
manifest
サーバーに再接続後
CACHE MANIFEST
#v01
/public/image/01.jpg
/public/index.css
NETWORK:
*
FALLBACK:
/
:triangular_flag_on_postです。 [注意事項】をご覧ください。] 図の右側のコンソールの出力を見てください。マニフェスト ファイルが変更されたため、ブラウザは新しいマニフェスト ファイルと古いマニフェスト ファイルを比較して、ファイルが変更されたことを確認し、ファイル内のリソースを再ダウンロードしてオフラインに格納します。
再びサーバーを閉じた後
Nodeを使ってHTML5のオフラインストレージを実装する、という記事は以上となります。HTML5オフラインストレージの詳細については、Script Houseの過去の記事を検索するか、引き続き以下の関連記事を参照してください。
関連
-
Html5で新しくなったこと
-
html+cssでメニューバーのスロードロップダウン効果を実現するコード例
-
htmlテーブルのレンダリングバイオグラフィーとセル幅の不具合が解決される
-
モバイルHTML5入力に関するFAQ(要約)
-
モバイル適応のためのremやviewportの使い方を説明する。
-
rtmpストリーミングライブのHTML5再生
-
入力ボックスの種類が数字のときに上下の矢印を消すHTML5メソッド
-
h5 web透かしSDKの実装コード例
-
Canvas がクロスドメイン画像を導入し、toDataURL() エラーが発生する。
-
キャンバス画像getImageData,toDataURLのクロスドメイン問題の解決方法を説明する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
キャンバスマルチシャドウグロー効果
-
フォントの調整のメニューの右上隅にWeChat内蔵のブラウザでHTML5は、ページが間違った問題を表示するために発生する
-
iosシステムでhtml5のvideoタグが再生できない問題を解決する。
-
videoタグによるストリーミング読み込みのhtml5実装
-
キャンバス経由でのRGBAフォーマットへの色変換とパフォーマンス問題の解決
-
html5モバイル価格入力キーボードの実装
-
画像にタイル状の透かしを追加するためのhtml5キャンバス
-
HTML5ページの長押しで画像を保存する機能を解決するための記事
-
iphoneXの前髪スクリーンに合わせたHtml5の簡易実装
-
HTML5によるメッセージ通知の利用(Web Notification)