我刚开始使用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进行绑定。 (不适用于上述功能)。我也搜索了这个,发现杀毒软件可能成为受害者。我试过禁用它但没有收获。
我知道一个解决方案,我可以禁用按钮直到连接建立并完成启用它。但我不希望用户限制。
如果有任何其他可能的问题,请更新我。
先谢谢。
答案 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);
});
});