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);
});
});