2015-09-30 88 views

回答

6

有一个配置选项可以告诉SignalR JS客户端在发送任何事件之前等待页面load事件完成。

只需在启动选项中设置waitForPageLoad: false以防止发生这种情况。当然,如果页面未加载,您必须确保您在回调中执行的任何操作都可以安全地执行。

任何类似YouTube视频不能加载都可能会延迟开始 - 所以我不确定它为什么没有更好/更广泛的记录!从源代码

$.connection.hub.start({ waitForPageLoad: false}).done(function() { 

}); 

摘录(这是我如何发现这一点):

 // Check to see if start is being called prior to page load 
     // If waitForPageLoad is true we then want to re-direct function call to the window load event 
     if (!_pageLoaded && config.waitForPageLoad === true) { 
      connection._.deferredStartHandler = function() { 
       connection.start(options, callback); 
      }; 
      _pageWindow.bind("load", connection._.deferredStartHandler); 

      return deferred.promise(); 
     } 
0

另一种可能性:当心说什么都没阻止浏览器,如长时间运行初始化代码。

我使用的是knockout.js,对于某些页面它有一个特别长的初始化 - 阻止浏览器并使其看起来像SignalR花了几秒钟,而实际上它只需要几毫秒。