自動更新とは
52日目です。
非同期通信と自動更新をごちゃごちゃに考えていたせいでエラー解決が遅れたので、改めてまとめます。
自動更新とは
一定時間ごとにデータベースと通信して、ページを最新の状態にしてくれる機能のこと。
自動更新の詳細
今回私が課題で作ったチャットアプリでは、その名の通り「アプリ上でメッセージのやりとりができる」必要があります。
仮に自動更新機能を実装していないと、「相手が送ったメッセージをタイムリーに受け取ることができない」という不便極まりないアプリになります。
(毎回自分でリロードして新しいメッセージが来ていないかチェックするのは不便ですよね)
「setInterval」メソッドを使うことで、自動更新のタイミングを変えられます。
例えば、下記のように引数に実行させる関数と、間隔の時間をミリ秒で取ることで、
「3秒に1回」自動更新のイベントを発火させられます。
$(function(){ setInterval(autoUpdate, 3000); });
自動更新も非同期通信のような流れで行われます(非同期通信の流れが全くわからない方は8/7の投稿をご覧ください)。
チャットアプリの例で簡単に説明すると、
- チャット画面のみで、設定した間隔(時間)毎に自動更新イベントが発火する
- 現在投稿されている最新のメッセージのidを取得する
- 取得したidをAjax通信でコントローラーに飛ばす
- コントローラーで、「Ajax通信で飛んできた(最新のメッセージ)id」より、「データベース上にあるメッセージのid」の数字が大きい(つまり新しい)場合に、DB上にあるidが大きいメッセージを全て取得する
- jbuilderでJSONを作成してJavaScriptに返す
- JavaScriptのdoneで受け取ったJSON(メッセージの情報)全てを、1つずつHTMLに変換し、既存の画面に加えてスクロールする。
非同期通信とは(8/7の投稿内容です)
ページ遷移(リロード)は行わずに、サーバから取得したデータを使ってページの一部分だけ変更して反映すること(この仕組みのことを、Ajaxという)。
JavaScriptがサーバと通信してくれているので、リクエストを投げた瞬間からユーザーは次の操作(登録、削除、編集など)ができる。そのため非同期通信を用いることでUX(User Experience、ユーザー体験)の向上に寄与できる。
非同期通信と自動更新の違い
ここまで整理するとわかったのですが、「自動更新」は「非同期通信」の機能を使った機能なのだと考えられます。
下記のように、どちらも共通点が多いかと思います。
・JavaScriptがサーバと通信してくれているため、「リロードしない」「ページの一部だけ書き変えてくれる」という点
・UXの向上に寄与している点(非同期通信であれば、ユーザーは投稿ボタンを押した瞬間から次の操作ができるし、自動更新であれば、投稿した瞬間に「投稿しました」などわざわざ相手に知らせる必要すらないのです)
自分が投稿したページでエラーが出ていれば非同期通信のみを実装したコードにバグがあり、もう一つ開いたチャット画面でエラーが出ていれば、自動更新を実装したコードにバグがあるということですね。
参考:
javascriptで一定時間ごとにページの自動リロードを行う | 大阪市天王寺区SOHOホームページ制作 | デザインサプライ-DesignSupply.-
明日は履歴書セミナーに向けて、履歴書の作成と、人生で初めて職務経歴書なるものを作ります。 (早く個人アプリ進めたい!!!)