如果我的Web应用程序中有许多常规的AJAX方法,但我已经引入了一个永远在线的SignalR连接,是否值得重构使常规AJAX方法成为集线器方法呢?它是否会更快,因为它使用已经存在的连接?
答案 0 :(得分:6)
恕我直言,这将是对SignalR的滥用。
会更快吗?这实际上取决于几个因素。第一个是哪个运输最终被使用。如果它是Web套接字,那么,是的,因为消息将通过保证已经建立的连接发送,但是如果它是SSE或LongPolling,那么每次发送>发送消息。第二个因素是,如果服务器允许保持连接,那么浏览器将在请求之间的一段时间内保持与服务器的开放TCP连接,因此无论如何都不会产生建立连接的开销。
另外,让我们不要忘记我们强大的朋友GET动词以及它带来的所有优点:网络最重要的功能之一:缓存。如果你有很多可缓存的数据,你不希望通过Web套接字发送实时消息来获取和检索它,因为如果你这样做,你基本上就会丢弃整个网络基础设施。浏览器不能再帮助你了,你必须自己用本地存储和自定义消息来构建所有的智能,因为缺乏一个更好的词,这是疯狂的。 :)你也放弃了完全缓存公共数据的代理的权力,这对于它可以帮助提高性能的程度非常低估。
我的指导是,您可以完全按照今天的方式保留简单的请求/响应,并充分利用像SignalR这样的技术来实现它的目的:实时通信。