是时候在客户端启动计数器了

时间:2010-06-07 12:58:19

标签: javascript jquery asp.net-mvc performance json

我正在使用asp.net mvc开发一个Web应用程序,我需要使用服务器的时间在客户端做一个秒表(计时器)(在某个时刻预编程30秒)顺便说一下,客户端的时钟不能作为服务器的时钟。所以,我正在使用Jquery通过JSon调用服务器并获得时间,但这非常紧张,因为每一秒我都会调用服务器来获取时间,如下所示:

 $(function() {
       GetTimeByServer();
    });

    function GetTimeByServer() {
      $.getJSon('/Home/Time', null, function(result) {
         if (result.SecondsPending < 30) {
            // call another function to start an chronometer
         } else {
            window.SetTimeout(GetTimeByServer, 1000); //call again each 1 second!
         }
      });
    }

它运行正常,但是当我有超过3或4个这样的调用时,浏览器会慢慢地运行!我想知道,如何提高客户端的性能,或者是否有任何方法可以做到这一点......有没有办法让客户端像服务器一样监听服务器以了解计时器是否应该启动... 。

PS:对不起我的英文!

感谢 干杯

3 个答案:

答案 0 :(得分:2)

我会一直在客户端检查。您已经在使用jQuery,只需使用计时器插件。我用this one取得了很好的成功。

答案 1 :(得分:2)

菲利普,    在页面加载时获取服务器时间以及客户端时间。并使用参考中的两个来确定服务器端的服务器时间,而不是每次都使用AJAX调用。对不起suedo代码过多,但它不应该太难。

var ServerTimeReference;
var ClientTimeReference;
function InitializeTime()
   $.getJSon('/Home/Time', null, function (result) {
       ServerTimeReference = result.ServerTime; //convert to js time 
       ClientTimeReference = new Date();
     });

function GetServerTime() { 
     var TimeDifference = //get the difference between server and Client time
     var CurrentClientDateTime = new Date();
     var CurrentServerTime = // using timedifference and CurrentClientDateTime calculate ServerTime
     return CurrentServerTime;
} 

答案 2 :(得分:1)

如果你真的想像这样使用它,你基本上有这个选择:

我不完全理解为什么你只是向客户端发送一个值而不仅仅是一个“ GO ”字符串,如果客户端应该开始做任何事情。 无论哪种方式,你不必每秒轮询一次(我的意思是来吧,如果你的本地PC的时钟是错误的那将是一个坏迹象)。因此,例如每10秒“同步”就足够了(这也很快)。

所以我的基本策略是,调用后端函数告诉我的客户,剩下多少时间去设置setTimeout该值。