2013-11-25 19 views
2

我剛開始使用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

我有兩個有關代碼性能的建議。

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

相關問題