前提
ruby on rails でwebサイトを作っています。
javascriptのsetInterval()メソッドを用いてページの自動更新を行っています(10秒毎に)。
こちらの記事を参考に自動更新処理を作成しました。
更新を行っているページ(以下ページA)は全ユーザ共通の画面です。
実現したいこと
ページAを100人のユーザが閲覧していると、10秒間に100回リクエストが発生します。
ページAは全ユーザ共通の画面のため、リクエスト回数を10秒ごとに1回としたいです。
考え方のヒントでも構いませんのでよろしくお願いします。
該当のソースコード
javascript
1$(function(){ 2 function buildMESSAGE(message) { 3 var messages = $('tbody').append('<tr class="messages" data-id=' + message.id + '><td>' + message.text + '</td><td><a href="/messages/' + message.id + '">Show</a></td><td><a href="/messages/' + message.id +'/edit">Edit</a></td><td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/messages/' + message.id + '">Destroy</a></td>'); 4 //'tbody'に'tr'以下のhtml全てをappendする 5 } 6 7 $(function(){ 8 setInterval(update, 10000); 9 //10000ミリ秒ごとにupdateという関数を実行する 10 }); 11 function update(){ //この関数では以下のことを行う 12 if($('.messages')[0]){ //もし'messages'というクラスがあったら 13 var message_id = $('.messages:last').data('id'); //一番最後にある'messages'というクラスの'id'というデータ属性を取得し、'message_id'という変数に代入 14 } else { //ない場合は 15 var message_id = 0 //0を代入 16 } 17 $.ajax({ //ajax通信で以下のことを行う 18 url: location.href, //urlは現在のページを指定 19 type: 'GET', //メソッドを指定 20 data: { //railsに引き渡すデータは 21 message: { id: message_id } //このような形(paramsの形をしています)で、'id'には'message_id'を入れる 22 }, 23 dataType: 'json' //データはjson形式 24 }) 25 .always(function(data){ //通信したら、成功しようがしまいが受け取ったデータ(@new_message)を引数にとって以下のことを行う 26 $.each(data, function(i, data){ //'data'を'data'に代入してeachで回す 27 buildMESSAGE(data); //buildMESSAGEを呼び出す 28 }); 29 }); 30 } 31});
補足情報(FW/ツールのバージョンなど)
ruby 2.5.3
Rails 5.2.8
jQuery 1.12.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/28 06:14
2022/11/28 08:14