CanLoad vs CanActivate for LazyLoading

时间:2016-09-23 15:23:03

标签: angular2-routing

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

2 个答案:

答案 0 :(得分:9)

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

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

这就是NG2 doc所说的

  

CanLoad防护可阻止功能模块资产的加载,直到获得授权。如果您想要预加载模块并防止未经授权的访问,请改用CanActivate防护。

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

答案 1 :(得分:0)

  • CanActivate -确定是否可以激活路由,对于后备加载的功能模块,此防护可能不是最佳方法,因为该防护将始终将模块加载到内存中,即使防护返回false,表示用户无权访问该路由。
  • CanLoad -确定是否可以延迟加载模块,控制是否可以加载路由。这对于延迟加载的功能模块很有用。如果守卫返回假,他们甚至都不会加载。

这是我对两个后卫使用延迟加载的功能模块进行的测试:

1。 CanActivate Guard测试

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

CanActivate Guard Test On Lazy Loaded Feature Module

1。 CanLoad Guard测试

在这里,当我们使用CanLoad Guard时,您会看到很大的不同,因为浏览器仅发出了9.2 MB大小的18个请求,在2.64秒内完成了传输,并在2.59秒内完成了完全加载。

CanLoad Guard Test On Lazy Loaded Feature Module

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

  

提示: 如果要在项目上进行测试,请确保选中了“网络”标签中的Disable Cache复选框,该复选框在第一张图片中标记了 < / p>