CanLoad vs CanActivate for LazyLoading

wee*_*ior 7 angular2-routing

如果我使用延迟加载并为"CanLoad"定义了一个保护.是否需要"CanActivate"?因为可以有效地加载模块但是然后用户做了使"CanLoad"无效的事情,但是因为它被加载,所以用户可以通过CanLoad.

Jul*_*obs 9

如果已经实现了CanLoad,则延迟加载不需要CanActivate.

如果您需要检查未经授权的访问,您可能仍希望用CanActivate替换CanLoad.

这就是NG2医生所说的

CanLoad保护阻止加载特征模块资产,直到获得授权.如果您想要预加载模块并防止未经授权的访问,请使用CanActivate防护.

请参阅https://angular.io/docs/ts/latest/guide/router.html#!#preload-canload)


Mah*_*wzy 5

  • CanActivate - 决定是否可以激活路由,对于延迟加载的功能模块,此守卫可能不是最佳方式,因为此守卫将始终将模块加载到内存中,即使守卫返回 false 这意味着用户无权访问路线。
  • CanLoad - 决定模块是否可以延迟加载,控制是否可以加载路由。这对于延迟加载的功能模块非常有用。如果守卫返回 false,它们甚至不会加载。

这是我对两个具有延迟加载功能模块的守卫进行的测试:

1. CanActivate Guard 测试

您会在网络页面的底部注意到它发出了 24 个请求,大小为 9.5 MB 传输在 3.34 秒内完成并在 3.47 秒内完全加载。

延迟加载功能模块上的 CanActivate Guard 测试

1. CanLoad Guard 测试

在这里,您将看到当我们使用 CanLoad Guard 时的巨大差异,因为浏览器仅发出 18 个请求,大小为 9.2 MB,传输完成时间为 2.64 秒,完全加载时间为 2.59 秒。

延迟加载功能模块上的 CanLoad Guard 测试

如果用户未经授权,CanLoad Guard 永远不会加载模块数据,这会为您提供更高的性能,因为加载时间减少了近 1 秒,这是加载网页的巨大时间,毫无疑问,这取决于模块大小。

提示: 如果要对项目进行测试,请确保Disable Cache选中网络选项卡中的复选框,它已在第一张图片中标记