【问题标题】:How to enable lazy loading for Repository Items in ATG如何为 ATG 中的存储库项启用延迟加载
【发布时间】:2012-11-16 14:55:49
【问题描述】:

我想知道如何延迟加载 ATG 中指定的存储库项。我已经尝试了 Lazy Loading Settings 下的 ATG 存储库指南中给出的所有选项,但到目前为止,配置为延迟加载的项目的所有属性都与父项目一起获取。

例如,如果用户实体与组织具有一对多关系,则加载用户存储库项会导致加载用户的所有组织项及其属性,例如帐单和送货地址。即使不使用组织集合也会发生这种情况。

除了存储库指南中给出的内容或任何问题之外,任何包含示例的回复都会很棒。

【问题讨论】:

  • 您如何确定项目的属性没有被延迟加载?顺便说一下,在您的具体示例中,我不会担心一些额外的用户详细信息,例如正在加载的用户地址;它没有那么多数据,在商业应用程序中,您可能(您希望)需要这些信息。
  • 我查看了在相关代码中使用 RepositoryItem 的 getProperty 方法访问的各种属性。即使我们没有从组织中显式访问送货地址的属性,我也可以看到在加载组织时对 contact_info 表进行了 sql 调用。

标签: repository atg


【解决方案1】:

当属性启用延迟加载时,该属性不会与存储库项一起从数据库中获取。该属性将在需要时从数据库中加载(使用另一个 SQL 查询),即。在页面中显示或在组件中使用的属性。

几个使用延迟加载属性的例子:

  1. 当存储库具有不经常使用的属性(通常包含大量内容)时,最好在它们上启用延迟加载,例如您可能有一个“新闻”存储库项目类型,其属性如下:标题、创建日期、内容(长字符串)。如果您显示按创建日期排序的新闻项目列表(仅标题),则仅加载标题和创建日期是有意义的。因此内容属性应该启用延迟加载。当您访问特定新闻项目时,将获取该属性。您不必在新闻列表演示期间加载所有内容属性,这将提高页面显示性能。

  2. 另一个示例(类似于上面)可能是产品目录和产品描述属性。通常在类别页面中,您只显示产品标题和图像。仅在显示产品页面时才加载和显示产品描述。为了提高类别(或子类别)页面的性能,将产品描述属性设置为延迟加载是有意义的。

  3. 如果查询返回大量存储库项目并且您大部分时间只使用其中的几个项目,那么使用延迟加载也是一种很好的做法。不使用的(不必包含大内容)可以延迟加载。

我一直在我的所有 ATG 项目中使用延迟加载属性,我认为这是一个很棒的功能。但是,在应用它之前,您必须考虑所有优点和缺点。有时它可能弊大于利。

我希望这将帮助您更好地理解延迟加载并享受在您的项目中使用该功能。

【讨论】:

    【解决方案2】:

    ATG 中的订单历史是延迟加载何时有用的一个很好的例子。如果您考虑一个典型的用例,它是这样的:

    1. 用户查看订单历史记录页面,即他们过去所有订单的列表
    2. 浏览结果,直到找到他们有兴趣查看的订单
    3. 查看订单或订单的一小部分

    如果不启用延迟加载,ATG 将在查看过去订单摘要时为该特定用户加载所有订单对象。订单对象是一个非常庞大且复杂的对象,加载多个订单会消耗大量的数据库和应用服务器资源。

    当用户查看订单历史页面时启用延迟加载,仅加载显示过去订单列表所需的信息,不加载该页面直接不需要的任何信息。如果用户随后点击单个订单,则此时会加载任何其他信息。

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2012-02-15
      • 2011-02-05
      • 2013-08-11
      相关资源
      最近更新 更多