自動更新とは

52日目です。
非同期通信と自動更新をごちゃごちゃに考えていたせいでエラー解決が遅れたので、改めてまとめます。

自動更新とは

一定時間ごとにデータベースと通信して、ページを最新の状態にしてくれる機能のこと。

自動更新の詳細

今回私が課題で作ったチャットアプリでは、その名の通り「アプリ上でメッセージのやりとりができる」必要があります。
仮に自動更新機能を実装していないと、「相手が送ったメッセージをタイムリーに受け取ることができない」という不便極まりないアプリになります。
(毎回自分でリロードして新しいメッセージが来ていないかチェックするのは不便ですよね)

「setInterval」メソッドを使うことで、自動更新のタイミングを変えられます。
例えば、下記のように引数に実行させる関数と、間隔の時間をミリ秒で取ることで、 「3秒に1回」自動更新のイベントを発火させられます。

$(function(){
    setInterval(autoUpdate, 3000);
  });

自動更新も非同期通信のような流れで行われます(非同期通信の流れが全くわからない方は8/7の投稿をご覧ください)。
チャットアプリの例で簡単に説明すると、

  1. チャット画面のみで、設定した間隔(時間)毎に自動更新イベントが発火する
  2. 現在投稿されている最新のメッセージのidを取得する
  3. 取得したidをAjax通信でコントローラーに飛ばす
  4. コントローラーで、「Ajax通信で飛んできた(最新のメッセージ)id」より、「データベース上にあるメッセージのid」の数字が大きい(つまり新しい)場合に、DB上にあるidが大きいメッセージを全て取得する
  5. jbuilderJSONを作成してJavaScriptに返す
  6. JavaScriptのdoneで受け取ったJSON(メッセージの情報)全てを、1つずつHTMLに変換し、既存の画面に加えてスクロールする。

非同期通信とは(8/7の投稿内容です)

ページ遷移(リロード)は行わずに、サーバから取得したデータを使ってページの一部分だけ変更して反映すること(この仕組みのことを、Ajaxという)。
JavaScriptがサーバと通信してくれているので、リクエストを投げた瞬間からユーザーは次の操作(登録、削除、編集など)ができる。そのため非同期通信を用いることでUX(User Experience、ユーザー体験)の向上に寄与できる。

非同期通信と自動更新の違い

ここまで整理するとわかったのですが、「自動更新」は「非同期通信」の機能を使った機能なのだと考えられます。

下記のように、どちらも共通点が多いかと思います。
JavaScriptがサーバと通信してくれているため、「リロードしない」「ページの一部だけ書き変えてくれる」という点
・UXの向上に寄与している点(非同期通信であれば、ユーザーは投稿ボタンを押した瞬間から次の操作ができるし、自動更新であれば、投稿した瞬間に「投稿しました」などわざわざ相手に知らせる必要すらないのです)

自分が投稿したページでエラーが出ていれば非同期通信のみを実装したコードにバグがあり、もう一つ開いたチャット画面でエラーが出ていれば、自動更新を実装したコードにバグがあるということですね。

参考:

javascriptで一定時間ごとにページの自動リロードを行う | 大阪市天王寺区SOHOホームページ制作 | デザインサプライ-DesignSupply.-


明日は履歴書セミナーに向けて、履歴書の作成と、人生で初めて職務経歴書なるものを作ります。 (早く個人アプリ進めたい!!!)