【问题标题】:ajaxified auto suggestajaxified 自动建议
【发布时间】:2009-02-06 10:46:11
【问题描述】:

我有一个在 ASP.Net 中构建的具有自动建议功能的搜索模块 搜索条件是培训名称,并且数据库中有一个存储培训的表。表中的训练规模将高达 30,000 次,因此我在选择方法时必须非常小心,同时牢记性能。

可能有大约 3000 个用户同时登录系统。当用户开始输入培训名称时,系统应自动建议。

我想到的方法如下

  1. 缓存对象 - 用户键入 3 个(例如 saf)字符后会出现数据库命中,系统将在活动表中搜索所有以 saf 开头的训练并缓存它们。其他请求将通过此缓存。 但是这种方法的问题是,如果有 3000 个并发用户在使用系统,并且如果他们都搜索 3 个不同字母的不同组合,那么缓存就会被破坏。

  2. 客户端缓存 - 对此没有多想。我在这里看到的唯一缺点是我们可能必须定期清除临时 Internet 文件夹。

  3. 使用 Session - 我想完全排除这种情况,因为我认为它会影响性能。

您能否建议我在这里可以采用的最佳方法或任何其他不同的方法。我正在寻找您对此的所有信息/想法。

非常感谢

深渊。

【问题讨论】:

    标签: asp.net ajax autosuggest


    【解决方案1】:

    我最喜欢的 jQuery 插件(如果您打算使用 jQuery)是 Flexbox

    它有一个令人印象深刻的功能列表。

    【讨论】:

      【解决方案2】:

      您可以使用jQuery Auto Complete plugin,它内置了缓存功能。

      $(document).ready(function()
      {
              $(".landingpage").autocomplete('/AutoSuggestHandler.ashx',
              {
                  minChars: 1,
                  matchSubset: 1,
                  autoFill: false,
                  delay: 10,
                  scroll: false
              }).result(OnResultSelected);
      }
      

      此外,您可以在通用处理程序上指定输出缓存,以满足跨用户缓存的需要。

      【讨论】:

        【解决方案3】:

        我认为你的第一种方法会奏效。

        确保字段上有索引 - 您可能不需要索引整个字段。这应该会给数据库一个不错的提升。您可能需要根据搜索的工作方式查看全文索引,甚至使用 lucene 之类的外部库,因为索引是性能问题。

        缓存对象,甚至是查询结果的 xml/json 以提高性能。

        您还应该设置 http 标头,以便浏览器也缓存 xml/json。

        【讨论】:

          【解决方案4】:

          您的帖子确实包含两个问题:

          1. 如何在我的网页上自动完成?
          2. 由于大量查询同时访问我的数据库,我担心性能问题。

          我的答案...

          1:我们发现 ASP.NET AJAX AutoComplete Extender 适用于所有现代浏览器,提供流畅的用户体验并且非常容易实现。

          在您的 Web 应用程序中,您需要创建一个具有特定签名的方法的 Web 服务(在上面链接的文档中介绍)。

          2:您是否证明您在项目的这一部分确实存在性能瓶颈?我建议设置一个测试工具并使用大量自动完成查询来访问您的数据库,以查看它可以花费多少。警惕premature optimization

          【讨论】:

          • 您是否在使用键盘选择项目时遇到了自动完成扩展程序的问题?在我当前的项目中,使用回车键选择一个项目会导致页面上的第一个按钮回发。我们正在使用面板,但没有设置默认按钮。
          • 完全没有问题 - 我们使用鼠标和键盘进行了大量测试。您是否在 TextBox 上将 AutoPostback 设置为 true?
          • 不,奇怪的是,如果您从页面中删除一个按钮,它只会选择下一个可用按钮。
          • 确实很奇怪...您是否尝试过从 AJAX 控件工具包附带的示例应用程序开始,如果您开始添加按钮,看看是否有同样的问题?
          猜你喜欢
          • 1970-01-01
          • 2012-01-18
          • 1970-01-01
          • 2011-08-24
          • 2017-10-26
          • 2014-11-30
          • 2011-12-28
          • 2016-09-23
          相关资源
          最近更新 更多