SignalR - установление соединения занимает довольно много времени

Я только начал работать с 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);
      });     });     });

Я не уверен, почему требуется время, чтобы установить соединение. Как я пытался с простым приложением чата, и это работает хорошо. Я делаю много других функций для этой страницы, а также использую нокаут для привязки. (не для вышеуказанной функциональности). Я также искал это и обнаружил, что антивирус может быть жертвой. Я тоже пытался отключить это, но безуспешно.

Я знаю одно решение, что я могу отключить кнопку, пока соединение не будет установлено и по окончании включить его. Но я не хочу, чтобы пользователь ограничивал.

Пожалуйста, сообщите мне, если возникнут другие возможные проблемы.

Заранее спасибо.

1 ответ

У меня есть два предложения о производительности кода.

1) Используйте метод.on() вместо.live()

Использование метода.live() больше не рекомендуется, поскольку более поздние версии jQuery предлагают методы.delegate и.on. следующие проблемы возникают с использованием.live():

I) jQuery пытается извлечь элементы, указанные селектором, перед вызовом метода.live(), что может занимать много времени в больших документах.

II) Так как все события.live() присоединяются к элементу документа, события обрабатываются самым длинным и самым медленным из возможных путей.

2) Удалите события щелчка из метода.done(), потому что методы "followProject" и "unfollowProject" оба нуждаются в событии click для того, чтобы вначале подвергнуться тигру.

Смотрите ниже код:

$(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);
           });       
        });
Другие вопросы по тегам