何时使用node.js以及何时使用ajax?

我有一个网站,这是完全在PHP和基本的jQuery阿贾克斯编码。 然而,当我了解到node.js / socket.io之后,我几乎重新编写了所有使用nodejs和socket.io的ajax实时内容。 我有点困惑,我是否做了正确的事情。 所以我的问题是何时是ajax比使用节点/套接字更优化的解决scheme?

首先,你应该了解两者的区别,答案就会变得清晰。

AJAX用于简单的asynchronous请求。 他们不需要build立一个节点服务器,几乎每个浏览器都支持它。 当你需要从服务器获取一条信息时使用它们。 然而,它们具有通过HTTP发送的开销,因此它们需要是正确的HTTP请求/响应(增加了重量)。

WebSockets(在Node.js / socket.io安装程序中提供)用于频繁访问某些数据,或者需要与服务器build立持久的连接。 您可以build立套接字连接,并将数据包从服务器发送到客户端。 与AJAX解决scheme相比,这是轻量级的,但旧版浏览器不支持Websockets,而且您需要设置一个处理这些请求的服务器。

特别是Socket.IO使用了一系列不同的技术,以便获得更好的浏览器支持:长轮询,多部分stream等。这可以让你从服务器得到“即时”的反馈,然而在大多数情况下,它仍然使用HTTP作为协议。 但是,如果它们可用(即由浏览器支持),它将使用WebSocket。

实际上在某些情况下Node.js / Socket.io 会使用AJAX

如果你不是在线游戏,或者你不需要经常更新应用程序的状态,我会build议使用AJAX而不是Node.js / socket.io安装程序。

Nodejs适用于需要在客户端和服务器之间保持持续连接的应用程序。 基本上,如果你想发送实时数据(聊天客户端,游戏等)之间的客户端和服务器nodejs是一个很好的select。

使用nodejs这种持久连接不会阻止其他请求。 许多其他语言,如PHP(每个连接开始一个新的服务器进程)在这种情况下奋斗,你可能最终会有巨大的CPU负载。

如果具有最低延迟的实时数据是目标,则将Socket.io和node.js放在一起是更好的select。 只有在不支持其他技术的情况下,才会回到长轮询状态,其优先select是使用networking套接字。

当然,apache(使用php)和nodejs都可以使用AJAX,问题应该是这是否是您传输数据的正确方法,我们需要更多地了解您想要实现的目标!