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

问题描述:

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

我面临的问题是:建立连接需要一些时间,并且由于我无法执行我所期望的操作。以下是我的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)使用。对()方法,而不是.live()

使用.live()方法,因为jQuery的报价.delegate和方法。对的后续版本不再推荐。 使用.live()会出现以下问题:

I)jQuery尝试在调用.live()方法之前检索选择器指定的元素,这在大型文档上可能很耗时。 II)由于所有.live()事件都附加在文档元素上,因此事件在处理之前会采用最长和最慢的路径。

2)将click事件从.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); 
      });  
     }); 
+0

的初衷是这样而已。但问题是如果点击关闭/取消关注 - 我们正在使用Hub方法调用,这需要建立连接。因此,如果连接没有建立,它会发出错误说“SignalR:连接尚未完全初始化”。 –

+0

我发现的可能原因是,我们正在为此页面加载许多JS和css文件。当我们删除它们时,连接将以毫秒为单位建立起来。但我们不能避免这些JS和CSS文件。 –

+0

很高兴你发现问题。我不确定你首先说的是什么,看起来好像使用永久连接作为集线器。为了解决加载许多JS和CSS文件,我能想到的唯一方法就是使用缩小。 – Lin