使网站自动填充更具响应性的技巧

时间:2009-03-09 08:41:04

标签: c# javascript autocomplete

在我网站的高级搜索屏幕中,大约有15个字段需要自动填充字段 它们的内容全部取决于彼此的价值(如果填写了一个,那么另一个的内容将根据第一个的值而改变)。
大多数领域都有很多可能性(至少1000个条目)。

如果用户停止输入半秒,则当前进行ajax调用。这个ajax调用快速调用我的Lucene索引并返回一堆JSon对象。方法本身非常快,但是数据的连接和传输太慢了。

如果我查看其他网站(比如说facebook),他们的自动填充功能就是即时的。我认为他们将可能的值放在他们的HTML中,因此他们不必进行往返。但我担心我正在处理的数据量,这不是一个选择。

有什么想法吗?

6 个答案:

答案 0 :(得分:5)

  1. 仅返回前x个结果。
  2. 了解用户选择的趋势, 并且最好是基于此的顺序 自动。
  3. 每个网址的缓存结果&击键组合, 这样你就不用往返了 如果你已经取得了结果 之前。
  4. 与所有人共享此缓存 使用相同URL的自动填充 &安培;击键组合。
  5. 当然, 启用gzip压缩 JSON,并确保您正在设置您的 缓存标头以缓存某些内容 时间。时间取决于您的费率 更改自动完成响应。
  6. 优化JSON以发送 最低限度。不要发送下来 你不需要的任何东西。

答案 1 :(得分:4)

您是返回所有可能性的结果还是仅返回前10个作为json对象。

我注意到很多人将大量结果发送回屏幕,但之后才显示前几个。通过发送少量结果,您可以减少数据传输。

答案 2 :(得分:2)

返回顶部的“X”结果,而不是整个列表,以减少选项的数量?您可能还想尝试添加一些趋势来跟踪用户从列表中选择的内容,这样您就可以尝试将顶级“X”设置为最常用/最常用的。您可以随时返回最相关的列表,如果仍在苦苦挣扎,则返回完整列表。

答案 3 :(得分:2)

除了将结果集限制在顶部X集之外,还要考虑对AJAX请求的响应启用缓存(这意味着使用GET并保持URL简单)。

令人惊讶的是用户经常退格然后最终重新输入完​​全相同的内容。此外,通过允许公共和服务器端缓存,您可以加快整个Round-trup时间。

答案 4 :(得分:1)

  • 在System.Web.Cache
  • 中缓存结果
  • 使用Lucene缓存
  • 使用GET而不是POST,因为IE缓存此
  • 只抓取一部分结果(人们建议10个)
  • 尝试像YUI one
  • 这样体面的第三方自动完成小部件

答案 5 :(得分:0)

返回前N个条目是一个很好的方法。但是如果你想/必须返回所有数据,我会尝试限制发送的数据和JSON对象本身。

例如:

“这里有一个长名称的公司”变成“这里公司......”(你把点放在客户端名称 - 再次;转移最少的数据)。

就JSON对象而言:

{n: "This Here Company", v: "1"}

......其中“n”是名称,“v”是值。