【发布时间】:2013-02-23 01:11:18
【问题描述】:
我的团队正在开发一个使用 MVC4 和 .NET 4.5 的 Web 应用程序。一项任务是创建父级下拉列表,该列表将在父级中选择一个值时更新子下拉列表 - 例如,在选择状态时,状态下拉列表将过滤城市的下拉列表。
在我们的其他项目中,我们使用 Ajax 调用 Web 服务或数据库在选择父值时填充子值。在我上面的示例中,选择了明尼苏达州,并对数据库进行 Ajax 调用以获取 MN 中的所有城市。我已阅读此处的其他帖子和遵循此概念的教程。
我们团队的一位新开发人员认为上述方法效率低下,最好在页面加载时获取所有城市,将城市作为 Jason 对象存储在 JavaScript 变量中,然后使用 jquery 循环遍历 JavaScript 变量并构建子列表。
有人可以就他们使用的方法给我反馈吗?当我们可能只显示 10 条记录时,我不相信将数千条记录拉入浏览器并存储在客户端上是非常有效的。该开发人员还认为,在 JavaScript 中循环遍历 10000 行 JSON 对象比调用数据库获取 10 行更快。
【问题讨论】:
-
我更倾向于不给客户带来这么多浪费的数据。桌面浏览器可能会顺利处理它,但如果没有别的,它会浪费带宽。对于城市等缓慢变化的数据,您可以大量利用缓存并消除数据库流量。
-
我同意 OP 和
Tim medora,如果您不必通过一次迭代获取所有数据,则无需将 10000 行推送到 JSON。这将是无效的。但是,如果您还是通过 AJAX 请求获得了全部 10000 行,则将数据推送到浏览器会更有效。 -
感谢您的反馈。我想缓存数据并减少数据库调用的次数。我认为这将是一个很好的妥协。我真的不相信需要在 js 变量中存储 100 或 1000 个 JSON 对象
-
即使没有显式缓存,数据库也会添加自己的缓存/优化,这仍然是我的首选方法。 使用缓存,它应该是极快的;一个 AJAX 请求,只提取您需要的城市。如果你想支持搜索(例如自动完成),你可以构建和存储一个像trie 这样的数据结构,其中包含服务器缓存中的所有城市。
-
@TimMedora 我以前从未实现过真正的,我将对此进行研究。字典会有点相似吗?字典将包含每个州的键和城市列表作为值?
标签: c# jquery asp.net-mvc