SignalR - 建立连接需要相当长的时间

时间:2013-11-25 11:04:47

标签: asp.net-mvc signalr signalr.client

我刚开始使用SignalR进行实时更新。我需要在建立连接后执行一些操作。所以我用.done()方法编写了代码。

我面临的问题是:建立连接需要一些时间,因为我无法执行我想要的操作。以下是我的js的代码片段。

   $(function () {
   // Proxy created on the fly  
    projectHub = $.connection.projectHub;
    $.connection.hub.logging = true;
    // Start the connection
    $.connection.hub.start().done(function () {
    $("#lnkFollowProject").live("click", function () {
        console.log("Follow click");
        projectHub.server.followProject(projectId, currentLoggedInUserId);
     });
     $(".lnkUnfollowProject").live("click", function () {
        console.log("Unfollow click");
        projectHub.server.unfollowProject(projectId, currentLoggedInUserId);
      });     });     });

我不确定为什么花时间建立连接。正如我尝试简单的聊天应用程序,它运作良好。我正在为该页面执行许多其他功能,并使用knockout进行绑定。 (不适用于上述功能)。我也搜索了这个,发现杀毒软件可能成为受害者。我试过禁用它但没有收获。

我知道一个解决方案,我可以禁用按钮直到连接建立并完成启用它。但我不希望用户限制。

如果有任何其他可能的问题,请更新我。

先谢谢。

1 个答案:

答案 0 :(得分:1)

我对代码性能有两点建议。

1)使用.on()方法代替.live()

不再推荐使用.live()方法,因为更高版本的jQuery提供.delegate和.on方法。     使用.live()时出现以下问题:

I)jQuery尝试在调用.live()方法之前检索选择器指定的元素,这在大型文档上可能很耗时。

II)由于所有.live()事件都附加在文档元素上,因此事件在处理之前会采用最长和最慢的路径。

2)从.done()方法中取出点击事件,因为“followProject”和“unfollowProject”方法都需要点击事件才能自己老虎。

见下面的代码:

$(function () {
            // Proxy created on the fly  
            projectHub = $.connection.projectHub;
            $.connection.hub.logging = true;
            // Start the connection
            $.connection.hub.start();

            $(document.body).on("click","#lnkFollowProject", function () {
               console.log("Follow click");
               projectHub.server.followProject(projectId, currentLoggedInUserId);
           });
           $(document.body).on("click",".lnkUnfollowProject", function () {    
               console.log("Unfollow click");
               projectHub.server.unfollowProject(projectId, currentLoggedInUserId);
           });       
        });