如果我使用延迟加载并为“CanLoad”定义了一个保护。是否需要“CanActivate”?因为可以有效地加载模块但是然后用户做了一些使“CanLoad”无效的东西,但是因为它被加载了,所以用户可以通过CanLoad。
答案 0 :(得分:9)
如果您已经实现了CanLoad,则延迟加载不需要CanActivate。
如果您需要检查未经授权的访问,您可能仍希望将CanLoad替换为CanActivate。
这就是NG2 doc所说的
CanLoad防护可阻止功能模块资产的加载,直到获得授权。如果您想要预加载模块并防止未经授权的访问,请改用CanActivate防护。
见https://angular.io/docs/ts/latest/guide/router.html#!#preload-canload)
答案 1 :(得分:0)
这是我对两个后卫使用延迟加载的功能模块进行的测试:
1。 CanActivate Guard测试
您会在“网络”页面的底部注意到,它发出了24个9.5 MB大小的请求,在3.34秒内完成了传输,并在3.47秒内完成了加载。
1。 CanLoad Guard测试
在这里,当我们使用CanLoad Guard时,您会看到很大的不同,因为浏览器仅发出了9.2 MB大小的18个请求,在2.64秒内完成了传输,并在2.59秒内完成了完全加载。
如果用户未授权,CanLoad Guard将永远不会加载模块数据,这将为您带来更高的性能,因为加载时间减少了将近1秒钟,这是加载网页的巨大时间,毫无疑问,这取决于模块的大小。
提示: 如果要在项目上进行测试,请确保选中了“网络”标签中的
Disable Cache
复选框,该复选框在第一张图片中标记了 < / p>