为用户缓存唯一的自动建议列表采取什么方法?

时间:2009-02-04 17:07:42

标签: c# asp.net sql xml autosuggest

我正在创建一个应用程序(asp.net/c#),它会自动提供用户输入的几个字段。每个用户最终都会构建自己的自动建议列表。每次他们添加一个项目时,如果它是一个新单词,它将被添加到他们的自动建议列表中,就像gmail一样。

我想知道大多数人是如何做到这一点的?为每次按键拨打服务器似乎效率不高?我应该为每个用户创建一个包含一个条目的巨大xml文件吗?每个用户的xml文件?我如何缓存它以使其高效?

各种各样的问题,但我基本上寻找的是最佳实践。谢谢。

3 个答案:

答案 0 :(得分:2)

数据存储
您应该将此信息存储在数据库中。创建一个或两个表,以便每个用户每个字段保存此类信息。

客户端查询
当用户开始在文本字段中键入时,您可以从客户端(通过AJAX)查询数据库。如果这样做,最好等到字段中至少有3个(ish)字符,然后再查询服务器以获取建议。这会略微减少请求数量以及客户端和服务器之间的流量。

我将此方法用于存在大量可能的自动建议命中的字段。

缓存
如果使用此方法,则可以通过在某些情况下缓存响应来优化过程。

假设只有在文本字段中有3个字符后才会触发查询,则可以缓存整个结果。添加到文本框中的任何其他字符都不会增加返回的结果数。因此,您可以继续过滤缓存的结果。但是,如果用户删除了某个字符,则可以刷新缓存以确保您拥有最合适的自动建议匹配。

服务器端预加载
在服务器端,收集所有这些数据并将其与页面请求一起发送。 (您可以将其作为javascript数组推送到某个地方,可以在文本字段的onchange事件中引用。这样,您就不必进行任何AJAX调用。

对于没有大量可能的自动建议命中的字段,这似乎更好。

答案 1 :(得分:1)

我会将值存储在数据库中(可能存储用户配置文件),并在用户登录时将值拉入ASP.NET Session。然后只需使用Session中的值进行自动完成值。这样,您只需在登录时访问数据库一次。

答案 2 :(得分:1)

根据您的JavaScript框架,Chuck Norris建议您在进行服务器调用之前构建客户端检查,以查看是否在字段中写入了给定数量的字符或单词。应根据该用户在数据库中输入的信息,使用给定用户的自动建议单词动态生成XML文件。

根据您尝试构建的应用程序,可能更容易对特定数据库字段执行全文SQL查询。为了提高性能,您可以构建一个cookie,该cookie将由客户端的浏览器缓存,让您的应用程序检查更改,或者在执行完整数据库查询之前检查它是否存在。

Chuck不建议使用会话变量,因为它会降低应用程序的性能,因为它必须在每个用户的内存中保留这些自动建议值。

在他放弃我的大脑之前,查克想知道你是否需要别的东西。