如何在ATG中为存储库项启用延迟加载

时间:2012-11-28 17:01:02

标签: repository atg

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

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

除了存储库指南或任何陷阱中给出的一些示例之外的任何回复都会很棒。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

  3. 如果查询返回大量的存储库项目并且大多数时间只使用其中的一些,则使用延迟加载也是一种好习惯。那些未使用的(它们不必包含大量内容)可以延迟加载。

  4. 我一直在我的所有ATG项目中使用延迟加载属性,我认为这是一个很棒的功能。但是,在应用之前,您必须考虑所有的利弊。有时它可能造成更多的伤害而不是好处。

    我希望这有助于您更好地了解延迟加载,并喜欢在项目中使用该功能。

答案 1 :(得分:0)

ATG中的订单历史记录是延迟加载有用的一个很好的例子。如果你考虑一个典型的用例,它就是:

  1. 用户查看订单历史记录页面,即所有过去订单的列表
  2. 浏览结果,直到找到他们有兴趣查看的订单
  3. 查看订单或订单的一小部分
  4. 如果未启用延迟加载,ATG将在查看过去订单摘要时加载该特定用户的所有订单对象。订单对象是一个非常大而复杂的对象,加载多个订单会占用数据库和应用程序服务器上的大量资源。

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