うまくいけば、これは自明であり、うまくいけばうまくいきます!これは、サーバーが1秒以上通知されていないと仮定して、ユーザーがマウスを動かすとすぐにサーバーに通知し、定期的に通知します。
次のタイムラインを可能な限り応答して処理するために、 ( jQueryタイマーや関数activityNotification()
などを使用して)毎秒実行するようにスケジュールします。setInterval(func, time)
- 0ミリ秒:ユーザーがマウスを動かし、サーバーにすぐに通知
- 657ミリ秒:ユーザーがキーを押しましたが、サーバーにアクティビティを通知するには早すぎます
- 1000ミリ秒:activityNotification()がスケジュールどおりに実行され、サーバーに通知していないアクティビティがあることを確認し、サーバーに通知します
- 2000ミリ秒:activityNotification()はスケジュールどおりに実行されますが、サーバーに通知するものはありません
- 2124ミリ秒:ユーザーがマウスを動かし、サーバーに最後に通知されてから1.124秒が経過したため、サーバーにすぐに通知されます
コード:
//Track the last activity you saw
var lastActivity = 0;
//Remember the last time you told the server about it
var lastNotified = 0;
//Determines how frequently we notify the server of activity (in milliseconds)
var INTERVAL = 1000;
function rememberActivity() {
lastActivity = new Date().getTime();
activityNotification();
}
function activityNotification() {
if(lastActivity > lastNotified + INTERVAL) {
//Notify the server
/* ... $.ajax(); ... */
//Remember when we last notified the server
lastNotified = new Date().getTime();
}
}
setInterval('activityNotification()', INTERVAL);
$.mousemove(function() {
//Remember when we last saw mouse movement
rememberActivity();
});
$.keyup(function() {
//Remember when we last saw keyboard activity
rememberActivity();
});
また、すべてのユーザーがJavaScriptを有効にしているわけではないことを忘れないでください。これにより、モバイルデバイスで深刻なバッテリーの消耗が発生します。