【问题标题】:dynamically display categories and sub categories within an ASCX control在 ASCX 控件中动态显示类别和子类别
【发布时间】:2012-07-07 14:11:45
【问题描述】:

在页面加载时显示所有类别和相应子类别的最佳方式(性能方面)是什么?

我正在考虑从包含 Mega Menu 的控件运行查询,该菜单应输出所有已发布的类别和子类别。但这会不断回到服务器运行查询吗?不利于性能!

然后我想在客户端机器上运行在 XML 文件中输出数据的查询(显然它将第一次从服务器运行查询),但随后它将读取 XML 文件。然后我在我的 Mega Menu 控件中使用 XSLT 设置 XML 数据的样式。

请指教?我正在使用 NopCommerce 1.9 使用 C# ASP.NET

【问题讨论】:

    标签: c# asp.net ascx nopcommerce megamenu


    【解决方案1】:

    您实际上只是将一个性能问题转移到另一个问题上。您所描述的被称为 N + 1 SELECT 问题。有关快速说明,请参阅此代码项目文章:Select N+1 Problem – How to Decrease Your ORM Performance

    现在,我不知道您是否使用 ORM,但无论您的数据访问层如何,这都是同样的问题。您是否应该延迟加载仅嵌套层次结构的一个级别并使您的客户端不必运行 N 个查询(每个查询都需要往返)来加载每个节点的子节点?或者您应该急切地将整个层次结构加载到客户端并按需呈现。答案是“视情况而定”。您可能最了解自己的数据。

    如果您的层次结构非常深并且有很多级别,请查看您的典型用户使用情况是否深入到此层次结构中。如果只有 20% 或更少的用户向下钻取,那么延迟加载解决方案可能适合您。

    如果构成您的类别的数据不是很大(我会说,小于 50K),那么急切地加载所有数据并将其呈现在您的客户端上是不费吹灰之力的。

    【讨论】:

    • 感谢您的反馈!当您说 50K 时,您指的是文件大小吗?我有大约 10 个父类别,每个类别中大约有 3-4 个子类别。我有 SQL Server 2008 数据库设置,我很可能会使用数据集和表适配器。
    • @Super1 我指的是所有数据的总和(不管它保存在哪里)。根据您的描述,听起来您的层次结构很浅,而且节点总数并不多。除非每个节点都有很多其他属性(链接、图像、描述等),否则我建议一次性将整个层次结构加载到客户端。
    猜你喜欢
    • 2012-10-14
    • 2016-10-12
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多