浏览GitHub存储库,我经常看到使用Ajax而不是socket.io的SPA实现。令我感到惊讶的是,我认为socket.io的实现速度应该更快(因此每次更改路径时都不必打开连接),从而提供更好的用户体验。或者我会错过什么?基于Ajax的SPA有什么优势吗?
答案 0 :(得分:3)
此决定完全取决于您的要求,应该。它甚至不是......或者"决定,在某些情况下,使用混合方法可能是一个好主意。
基于Ajax的SPA有什么优势吗?
一些想法:
答案 1 :(得分:2)
添加@alapeno发布的绝对正确的答案,这里没有“最佳实践”。这是你的用例的问题。
使用 Websockets (其中socket.io只是一个实现,而IMHO有更好的实现)允许您在客户端和服务器之间进行双向通信,服务器可以在其中启动通信只要插座已启动。
另一方面,Ajax要求客户端每次都启动通信。
两者都有优点和缺点。
<强>的WebSockets 强>
一些优点
SwaggerSockets
一些缺点
<强>的Ajax 强>
一些优点
一些缺点 - 更多的开销。对于每个请求,您将拥有各种标头,TCP开销等,尽管这不是一个很大的问题。正如@alapeno所说,现代浏览器在连接管理方面非常聪明。 - 没有推送通知。如果您想知道服务器上是否发生了某些事情,您将不得不问。 (服务器发送的事件在浏览器支持方面仍然处于起步阶段,但最终将是推送的一个不错的选择。)
我确信可以在每个类别中添加更多分数,但这些是我在选择时所考虑的许多事项。
不同用例的一个很好的例子是Stripe vs. Slack。
Stripe 有一个非常好的REST API,因为它们直接针对事务操作。他们没有在外部使用Websockets,因为它对他们的模型没有意义。
另一方面, Slack 是关于实时通信的。他们广泛使用Websockets来发送和接收消息,因为用户必须在发送数据后立即收到数据。当然,Slack也有一个REST API,因此显然有空间可以在一个有意义的服务中使用它们。