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);
});
});
的初衷是这样而已。但问题是如果点击关闭/取消关注 - 我们正在使用Hub方法调用,这需要建立连接。因此,如果连接没有建立,它会发出错误说“SignalR:连接尚未完全初始化”。 –
我发现的可能原因是,我们正在为此页面加载许多JS和css文件。当我们删除它们时,连接将以毫秒为单位建立起来。但我们不能避免这些JS和CSS文件。 –
很高兴你发现问题。我不确定你首先说的是什么,看起来好像使用永久连接作为集线器。为了解决加载许多JS和CSS文件,我能想到的唯一方法就是使用缩小。 – Lin