我想知道如何延迟加载 ATG 中指定的存储库项。我已经尝试了延迟加载设置下的 ATG 存储库指南中给出的所有选项,但到目前为止,配置为延迟加载的项目的所有属性都与父项目一起获取。
例如,如果用户实体与组织具有一对多关系,则加载用户存储库项目会导致加载用户的所有组织项目及其属性,例如帐单和送货地址。即使不使用组织集合也会发生这种情况。
除了存储库指南中给出的内容或任何陷阱之外,任何带有一些示例的回复都会很棒。
我想知道如何延迟加载 ATG 中指定的存储库项。我已经尝试了延迟加载设置下的 ATG 存储库指南中给出的所有选项,但到目前为止,配置为延迟加载的项目的所有属性都与父项目一起获取。
例如,如果用户实体与组织具有一对多关系,则加载用户存储库项目会导致加载用户的所有组织项目及其属性,例如帐单和送货地址。即使不使用组织集合也会发生这种情况。
除了存储库指南中给出的内容或任何陷阱之外,任何带有一些示例的回复都会很棒。
当属性启用了延迟加载时,该属性不会与存储库项一起从数据库中获取。该属性将在需要时从数据库中加载(使用另一个 SQL 查询),即。在页面中显示或在组件中使用的属性。
使用延迟加载属性有意义的几个例子:
当存储库具有不使用的属性(通常包含大量内容)时,通常最好启用延迟加载,例如,您可能有一个“新闻”存储库项目类型,其属性如下:标题、创建日期、内容(长字符串)。如果您显示按创建日期排序的新闻项目列表(仅标题),则仅加载标题和创建日期是有意义的。因此内容属性应该启用延迟加载。当您访问特定新闻项目时,将获取该属性。您不必在新闻列表演示期间加载所有内容属性,这将提高页面显示性能。
另一个示例(类似于上面)可能是产品目录和产品描述属性。通常在类别页面中,您只显示产品标题和图像。仅在显示产品页面时才加载和显示产品描述。为了提高类别(或子类别)页面的性能,将产品描述属性设置为延迟加载是有意义的。
如果查询返回大量存储库项目并且您大部分时间只使用其中的几个项目,那么使用延迟加载也是一个好习惯。未使用的(它们不必包含大量内容)可以延迟加载。
我一直在我的所有 ATG 项目中使用延迟加载属性,我认为这是一个很棒的功能。但是,在应用它之前,您必须考虑所有优点和缺点。有时它可能弊大于利。
我希望这将帮助您更好地理解延迟加载并享受在您的项目中使用该功能。
ATG 中的订单历史记录是延迟加载何时有用的一个很好的例子。如果您考虑一个典型的用例,它是这样的:
如果不启用延迟加载,ATG 将在查看过去订单摘要时为该特定用户加载所有订单对象。订单对象是一个非常大且复杂的对象,加载多个订单会消耗数据库和应用服务器上的大量资源。
当用户查看订单历史页面时启用延迟加载,仅加载显示过去订单列表所需的信息,不会加载该页面直接不需要的任何信息。如果用户随后点击单个订单,则此时会加载任何附加信息。