HTML5 のオフライン機能
Google Developer Day 2011に参加しました。
参加したセッションのメモを書いときます。
(追記 2012/01/14)
Googleから動画が公開されました。
http://www.youtube.com/watch?v=MY06xnSZyaw:moive
※このセッションで解説された内容に一部変更点があるとのことなので、こちらも合わせて参照下さい。
(追記ここまで)
HTML5 のオフライン機能(Eiji Kitamura) @agektmr
東京 - Google Developer Day 2011
http://www.google.com/intl/ja/events/developerday/2011/tokyo/agenda/session_1001.html
動的なデータの保存
- Web Storage (localStorage / sessionStorage)
- IndexedDB / WebSQL
localStorage
- シンプルなキーバリュー型
- 文字列しか保存できない
sessionStorage
- localStorage とほぼ同じ。ただし...
- ブラウザを閉じると消されてしまう
- 新しいウィンドウやタブで開くと、別のセッションとして扱われる (Cookie のようには使えない)
- その為、入力フォームを含んだページなどを複数のウィンドウで開いてもプログラム内での整合性が壊れる事は無い
オリジン(Origin)
- データを共有出来る範囲はオリジン(Origin)
- 例えば http://example.com:80/ の様なURLの場合には example.com:80/ の部分がオリジン。
※【筆者注】オリジンについては以前にこのブログでも解説した事が有ります。
HTMLでオリジン(Origin)とは何を意味しているのか - 強火で進め
http://d.hatena.ne.jp/nakamura001/20110113/1294937964
静的リソースの保存
- App Cache
- HTML や CSS、JavaScript を手軽にキャッシュできる
- モバイルでのサポート率が高い
【記述例】
使用する側のHTMLでの記述
<html manifest="example.appcache">... </html>
mainfestファイルの記述
CACHE MANIFEST # 2010-11-17-v0.0.1 # 明示的にキャッシュされるエントリ CACHE: index.html stylesheet.css images/logo.png # ユーザーがオフラインの場合は static.html が表示される FALLBACK: / /static.html # ユーザーがオンラインの必要があるリソース NETWORK: *
App Cache を使いこなす
- App Cache を指定する HTML は無条件にキャッシュされる
- manifest の文法が間違っていると、キャッシュされない(validator での確認がおすすめ)
- キャッシュ指定されたファイルが1つでも404なら全くキャッシュされない
- manifest ファイルの Content-Type は text/cache-manifest
- manifest ファイルを一文字でも変更すれば自動的にバージョンアップ
- manifest ファイル生成ツール manifestR
- appcachefacts.info
バイナリデータの保存
【URLの例】
filesystem:http://example.com/temporary/myfile.png
- window.requestFileSystem()での領域サイズの指定は少なくともChromeでは指定しても意味が無い
- モバイルの場合はCookieの代わりにWeb Storageを使うが重要
- デモ「Peephole Extension」
データの同期
- オンラインバージョンとオフラインバージョンは、起動時の処理を分ける
- サーバーサイドの機能を補完するファイルを用意しておき、オフライン時に FALLBACK させる
※【筆者注】FALLBACKは先ほど出てきたmainfestファイルの記述例では以下の部分で指定しています。
# ユーザーがオフラインの場合は static.html が表示される FALLBACK: / /static.html
データの同期: Shared Worker を使う方法
サーバーと直接通信する代わりに、オンライン時に通信を肩代わりし、変更点をローカルに保存してくれる Worker を用意し、これとやりとりをする。
navigator.onLine - 通信状況の確認
- navigator.onLineで現在、ネットワークに繋がっているかどうかをチェック出来る
【記述例】
if (navigator.onLine) { console.log('ONLINE!'); } else { console.log('Connection flaky'); }
- リスナーに登録しておいネットワークの状態が変わった時に発生するイベントで処理を行う事も可能
【記述例】
window.addEventListener('online', function(e) { // サーバーとデータを再同期 }, false); window.addEventListener('offline', function(e) { // サーバーとのやり取りをキューに追加 }, false);
クォータ(使用可能なファイルやメモリサイズ)
- こちらを参照
- Quota APIは今の所、ドキュメントがほぼ無い状態
- Chrome ウェブアプリなら無限のクォータを得ることができます
- manifest.json ファイルにパーミッション "unlimitedStorage" を追加することで、クォータを無制限にすることができます。
(2011/11/16 追記)
講演者の北村 英志さんのGoogle+にて以下のコメントが有りました。
ChromeのQuota管理機能について記事を書きました。この内容は #gdd11jp の講演内容と矛盾しています。その辺りは追ってお知らせします
https://plus.google.com/107085977904914121234/posts/ALyGEqdCVE6
(追記ここまで)
Polyfill
Polyfillとは新しいAPIなどの代わりに使用可能なライブラリなどの事。
- ライブラリ例
- storage polyfill by remy sharp
- sessionstorage by andrea giammarchi
- Amplify.js by appendTo HTML5 API with fallbacks for HTML4 browsers (including IE6)
- store.js - with fallbacks for legacy browsers
- YUI3 CacheOffline by YUI team
その他のリソース
- Stash - JavaScript オフラインストレージライブラリ
- Lawnchair - シンプルな json storage
- Game Asset Loader - App Cache の欠点を解決
Using the HTML5 Filesystem API: A True Filesystem for the Browser
- 作者: Eric Bidelman
- 出版社/メーカー: O'Reilly Media
- 発売日: 2011/08/05
- メディア: ペーパーバック
- 購入: 1人 クリック: 4回
- この商品を含むブログを見る
関連情報
オフライン系APIを解説した本。
- 作者: 小松健作
- 出版社/メーカー: 秀和システム
- 発売日: 2011/10/25
- メディア: 単行本
- 購入: 1人 クリック: 8回
- この商品を含むブログ (4件) を見る