3

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

我想知道大多数人是怎么做到的?每次按键都调用服务器似乎效率不高?我应该为每个用户制作一个包含一个条目的巨大 xml 文件吗?每个用户的 xml 文件?我将如何缓存它以使其高效?

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

4

3 回答 3

2

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

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

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

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

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

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

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

于 2009-02-05T07:16:25.940 回答
1

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

于 2009-02-04T17:13:52.300 回答
1

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

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

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

Chuck 想知道在他交出我的大脑之前你还需要什么。

于 2009-02-05T06:30:25.080 回答