【问题标题】:Server Side Caching Strategies for jQuery auto-complete?jQuery自动完成的服务器端缓存策略?
【发布时间】:2011-11-30 02:46:06
【问题描述】:

我正在我的网站上实现几个标记字段,其中包括使用 jquery UI 插件的自动完成选项。我一切正常,虽然小部件本身并不像我希望的那样健壮(例如,有没有办法使列表中的第一项始终突出显示),但它现在可以使用。

我的问题是处理服务器端对自动完成数据的请求。现在我正在使用 AJAX 来检索提供的输入项的潜在匹配项。我正在访问的表中有大约 10,000 条记录,我的想法是,与其不断查询该表,不如将这些记录的列表缓存在我服务器上的共享/静态属性中(我正在使用 ASP. NET MVC 和 SQL Server 后端)并改为查询该列表。我会每 4 小时左右刷新一次列表,以保持最新状态。

这个想法显然是为了减轻我的 SQL 服务器的压力并最大限度地提高自动完成下拉菜单的性能。 我最终想知道的是,在我的服务器上的内存中保留一个包含 10,000 个值的列表/数组是否是一种不好的做法;这里有已知的限制/阈值吗?我的服务器有 2GB 的 RAM,无论如何可能需要尽快升级。

任何建议将不胜感激。

感谢您的宝贵时间!

【问题讨论】:

  • 您现在有性能问题吗?查询是不是很简单?像“asdf%”这样的东西?这个下拉菜单的点击频率是多少?听起来您正在优化性能而没有理由优化性能。
  • 您是否同意几乎用户一生都不会搜索所有 10,000 个值?我建议每次用户搜索某个字母或短语时创建缓存。一周后,您的服务器可以创建一个“搜索最多”列表。与 10,000 条相比,缓存记录的数量可能只是小孩子。如果用户搜索一个稀有的关键字,他们需要等待更多的毫秒,以便服务器创建新的缓存。如此灵活的策略。

标签: jquery sql-server asp.net-mvc jquery-ui autocomplete


【解决方案1】:

为什么不使用 asp.net mvc 提供的OutputCache 属性。它比将它们存储在内存中更好,只需让框架为您处理即可。

您可以轻松设置超时等。

【讨论】:

  • 嗯,有趣,我不知道这个属性,但我可以考虑一下。如果我最终走那条路,我会告诉你的。感谢您的建议!
【解决方案2】:

10,000 个小字符串应该不会太糟糕 - 我以前做过,没有明显的副作用。

我建议在没有内存项目的情况下运行您的应用程序,然后再次使用,并查看 Windows 任务管理器中的内存和 CPU 使用情况,以了解您真正使用了多少内存 -这将有助于确定它是否会在未来引起问题。

但每次访问数据库可能也不会那么糟糕 - 除非您拥有大量流量,否则效果可能可以忽略不计。

【讨论】:

  • 我在周末发布了这个更新,到目前为止,性能影响似乎并没有那么糟糕。到目前为止,我只有少数用户使用该系统,但据我所知,我使用的内存比更新前多 30-50MB(不过我还添加了一些其他的东西存储在会话中,这样也可以解释其中的一些内容)。
猜你喜欢
  • 2015-12-24
  • 2012-02-11
  • 2013-02-09
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2016-09-01
相关资源
最近更新 更多