使用AJAX或Socket.io自动完成?

时间:2017-08-23 13:05:28

标签: node.js ajax socket.io

我正在使用Node.js和Express构建搜索应用,我想添加一个自动完成功能。以前我用过Socket.io来构建一个聊天应用程序,所以Socket.io首先出现在我脑海里。

但我做了一些研究,看起来很多人都在使用AJAX进行自动完成,那么这两种实现有什么区别?

我对TCP和HTTP协议没有太多经验,所以我非常感谢明快而简单的新手答案:)

2 个答案:

答案 0 :(得分:3)

Socket.io/Websockets主要用于服务器和客户端之间的实时交互。 Socket.io还需要持续连接和更多设置,以使服务器响应单个客户端。无论哪种方式,速度将主要取决于服务器处理。在搜索自动完成的情况下,您实际上向服务器发送请求并期望将单个响应发送回请求客户端,我个人会使用AJAX路由。这个问题有一些很好的答案,详细介绍了这一点:What is the disadvantage of using websocket/socket.io where ajax will do?

答案 1 :(得分:3)

首先,您的用例是创建自动完成功能。那意味着什么?这意味着当您在输入字段中插入一个字母时,您将要求服务器使用您要查找的术语来接收所有自动完成值。

作为开发人员,当您阅读此功能详情时,您应该记住event事件中的keypress一词。因此,每次触发此事件时,您都希望请求服务器获取自动完成列表。 你有什么可能做到的?

这种类型的场景中最常用的是简单的ajax调用,它将发送请求,完成后将使用相应的详细信息更新自动完成。正如我们在这种情况下看到的每个字母的类型,可能会发出一个请求(通常可以实现debounce function)以减少调用次数。这里好的想法是,一旦收到你的详细信息,你就会关闭连接,并且有数百万个jquery的插件正在做这件事。

第二种方法是使用socket.io这也是一个可行的选项,您将打开一次连接,并且对于每个keypress event,您将发出获取详细信息,这通常会更快,因为您将重复使用现有的连接。这里的关键是你需要自己创建它我不知道任何使用socket.io实现autocomplete的插件。

<强>结论

<强> Socket.io

    由于重用现有连接,
  • 更快
  • 更多的劳动力,非常少的插件|扩展
  • 适用于已在应用上使用socket.io的情况
  • 仅针对自动填充功能过度杀伤

<强>的Ajax

  • socket.io
  • 相比较慢
  • plugins
  • 总体上是这个用例的一个很好的解决方案。