参戦してきた
HTML5で作るオフラインwebアプリケーション
目次
- イントロダクション
- オフラインWebアプリとは
- 実現するためのAPI
- アプリケーションキャッシュ
- web Database
- web Strage
- web Workers
- HTML5時代のWebアプリアーキテクチャ
イントロダクション
オフラインwebアプリとは
- Gearsを使用したアプリは多くない
- 普及していない理由は下記
- ニーズが顕在化されていない・・・常時接続だろJK
- ブラウザプラグインというアプローチが阻害
- 開発の知識をもった人材が不足していた
- ニーズ:モバイルネットの普及
- ブラウザプラグイン:ブラウザ自身による実装
- 知識と人材の不足:標準化により開発者人口が増加
- Open WebによるRIA開発で行きましょう
アプリケーションキャッシュ
- キャッシュマニフェストファイルを作成
CACHE MANIFEST
# version: 200909241051hello.html
hello.js
- text/cache-manifestというMIMEタイプ、UTF-8で公開する
- としてheadで記載
- manifestファイルの変更を確認し、キャッシュしなおす
- アプリケーションキャッシュがあると開発しづらい
- 開発時
- アプリケーションキャッシュを使わない
- manifestファイルを動的に生成する
- 開発時
- アプリケーションキャッシュの動作をJavaScriptで制御する
Web Databse
- フルSQL
- domain restrict
- one domain has n-DBs
- one DB has n-tables/n-indexes/n-view
- マイコミジャーナルの記事と同じ
Web Storage
- key-valueストレージ
- domain restrict
- LocalStorage:永続
- SessionStorage:ウィンドウ生存中
- file://だとwebkitでは正しく動作しないかも・・・
Web Worker
- バックグラウンドで動作するスレッド
- 現在のJavaScriptはすべてがUI処理の一環として処理される
- 処理が重いのでブラウザが死ぬる
- 今後もっとがんばりたいよね?
- スレッドとは厳密な意味で異なり変数を共有できない
- window, documentといった変数も不可
- ワーカ間のデータ共有にはメッセージングのAPIを用いる
- worker→UI threadに投げる
- 開発時
- workerの処理はデバッガで追うことができない
- メッセージングのコードはすぐ複雑になる
- メッセージフラグが必要となり膨大なswitch-caseなどになりがち
- AlexService・・・Web Workersのオブジェクト処理ライブラリ
- workerの処理はデバッガで追うことができない
HTML5時代のWebアプリアーキテクチャ
- 理想的なオフラインWebアプリを実現するためには
- メリット
- ローカル内で処理が可能で、オフラインでもほぼ完全に動作する
- ローカル内で処理が完結するため、高速でリソース消費量も少ない(まじで?)
- DBアクセスはゼロ距離だから確かに速いはず
- サーバ間通信も制御可能
- デメリット
- あれー
- 問題点
- ノウハウの蓄積が少なすぎる
- 下記要件が混ざることによる困難さ
- DBをローカルに持ち込む設計手法
- 差分アップロード/ダウンロード処理の設計と実現(高速かつフェイルセーフを実装必須)
- クライアント状況に応じた処理の切り替え
- オンライン/オフライン
- ローカルDBがある/ない/あるけど容量がいっぱい
- データ変更の衝突
Alexing Framework
- Open Web Architectureに従ったアプリケーションの雛形を数分で開発可能
- サーバ上にJava Classを作成、Alexingを通すことでJavaScript Classとして操作可能
- サーバ側:データモデルを定義するだけ
- クライアント側:RESTfulがいい具合にやってくれる
質問
- ワーカーの処理時間は制御できるの?
- オフラインWebアプリとクライアントアプリの差異は?
- インストールの手間
- メリットであった状況判断については、モバイルデバイスが富豪的になる前提?
- デバイス情報を取得するAPIが必要
- それがChromeOSか!?