Web Storage

Web Storageは、クライアント内にデータを永続化するための機構だ。大きく、以下の二つに分けられる。

  • Storage・・・キー/バリューの形式で永続化できる。キーと値はどちらも文字列である必要がある。localStorageはドメインごとに保存され、永続化期間は無制限だ。sessionStorageはウィンドウごと保存され、永続化期間はそのウィンドウを閉じるまでとなる

      // ローカルストレージに値を保存する
      window.localStorage.pageLoadCount = 0;
  • データベース・・・SQLを用いてアクセスする事の出来る永続化領域。非同期APIと同期APIの双方を用いてアクセスすることができる。非同期APIは扱いにくい分、データアクセスがバックグラウンドで行われるため、UI操作の妨げにならない

      // データベースに対して非同期でSQLを実行する
      var database = window.openDatabase();
      // 非同期APIは、コールバック関数を渡して結果を受け取る
      database.transaction(function(tx) {
        // SQLの実行
        tx.executeSql("insert into TEST values(?)", ["Hello"]);
      });

Web Workers

Web Workersは、バックグラウンドで動作するJavaScriptスレッドのこと。「重い」処理を行うJavaScriptコードも、ワーカで実行するようにすれば、UIをブロックする事なく処理を行える。

メインページのJavaScriptとワーカ、もしくはワーカ同士はJavaScriptオブジェクトを「メッセージ」として送受信することにより、ワーカ間の協調を実現する。

  [mainpage.js]

  // ワーカを作成
  var worker = new Worker('worker.js');
  // ワーカからメッセージを受け取ったら、DOMを更新する
  worker.onmessage = function (event) {
    document.getElementById('result').textContent = event.data;
  }

  [worker.js]

  // 5秒後にメインワーカに対して「Hello」という文字列を送信する。
  setTimeout(function() {
    postMessage("Hello");
  }, 5000);

また、複数のウィンドウ間で共有されるSharedWorkerという仕様もある。さらに、ブラウザのウィンドウを閉じても動作を続ける「Persistent Worker」という仕様についても議論が行われている。

Web Sockets

サーバサイドプロセスと双方向に通信する事を可能にする仕組みがWeb Socketsだ。サーバ側でもWebSocketsへの対処を必要とされるが、HTTPを用いずに効率的な双方向通信を実現可能なのが特徴。

  // WebSocketを作成
  var ws = new WebSocket("ws://example.org");

  // ソケットのオープンに成功した
  ws.onopen = function() {
    // サーバにメッセージを送信する
    ws.postMessage("Hello from client");
  };
  // サーバからメッセージを受け取った
  ws.onmessage = function(message) {
    alert("Message from server:" + message);
  };

まとめ

田村氏は講演の最後に、「HTML5はアプリケーションプラットフォームである」という言葉で締めくくった。その言葉通り、HTML5が普及した暁には、プラットフォームとしてのWebをさらに活用した、新たなブレークスルーが起きるであろう事は間違いないだろう。