通知システムで作業していますが、通知のポーリングによりページが非常に遅く読み込まれます。 私は非常に遅いという意味ですが、通知コードをコメントアウトするとスムーズに実行されます。ここでは、ポーリング通知のための私のAjaxのコードは次のとおりです。ここで通知ポーリングによりページが非常に遅くなります
function pollNotification() {
$.ajax({
method: 'POST',
url: urlGetNotification,
async: true,
timeout: 0,
cache: false,
data: {
_token: token
},
}).done(function (notifs) {
//my code here
}).always(pollNotification);
}
は、通知を取得するための私のサーバー側のPHP(laravelフレームワーク)のコードは次のとおりです。要するに
public function getNotification()
{
$count=0;
$user = User::select('last_notif_timestamp')->where('id',Auth::user()->id)->get(); // fetching last timestamp when user clicked on notification
$notification = Notification::where('receiver',Auth::user()->id)->orderBy('updated_at','desc')->get(); //checking for notification in table
$prevDate = Session::get('prevDate'); //temporary variable to check when the last notification came
if($notification->count()>0) {
if ($prevDate == null || $prevDate < $notification[0]->updated_at) {
Session::set('prevDate', $notification[0]->updated_at);
$notifications = array();
foreach ($notification as $notif){
if($notif->updated_at > $user[0]->last_notif_timestamp) //Keeping track of notification counter
$count++;
$notifications[] = $notif;
}
return response()->json(['notifications'=>$notifications, 'count'=>$count],200);
}
else{
sleep(10); // Sleeping for 10 seconds for next poll
self::getNotification(); //calling function recursively
}
}
sleep(10);
self::getNotification();
}
新しい通知通知のためとあれば、このコードのチェックがありますそれが存在すれば、カウント値でそれらの通知を返します。 通知がない場合は、10秒間スリープ状態になり、同じ機能が再帰的に呼び出されます。
ページを高速に読み込むための解決策を提案してください。 ありがとう!
よろしくお願い致します!それはsleep()を削除してから正常に動作し、通知がない場合はnullを返します。しかし、継続的なポーリングのためにユーザーの数が多い場合、サーバーに負荷がかかりますか? –