CanLoad против CanActivate для LazyLoading

Если я использую ленивую загрузку и мне назначен охранник для "CanLoad". Нужен ли CanActivate? Например, модуль может быть загружен корректно, но затем пользователь делает что-то, что делает недействительным "CanLoad", но, поскольку он загружен, пользователь может пройти CanLoad.

1 ответ

CanActivate не требуется для отложенной загрузки, если вы уже внедрили CanLoad.

Вы все еще можете заменить CanLoad на CanActivate, если вам нужно проверить на несанкционированный доступ.

Это то, что говорит док NG2

Защита CanLoad блокирует загрузку ресурсов функционального модуля до тех пор, пока не будет разрешено это сделать. Если вы хотите как предварительно загрузить модуль, так и защитить от несанкционированного доступа, используйте вместо этого защиту CanActivate.

См. https://angular.io/docs/ts/latest/guide/router.html)

  • CanActivate - решает, можно ли активировать маршрут, эта защита может быть не лучшим способом для отложенных модулей, поскольку эта защита всегда загружает модуль в память, даже если защита вернула false, что означает, что пользователь не авторизован для доступа маршрут.
  • CanLoad - решает, может ли модуль загружаться лениво, контролирует, можно ли даже загрузить маршрут. Это становится полезным для функциональных модулей с отложенной загрузкой. Они даже не загрузятся, если охранник вернет false.

Это тест, который я сделал на обоих охранниках с лениво загруженным функциональным модулем:

1. CanActivate Guard Тест

внизу страницы "Сеть" вы заметили, что было выполнено 24 запроса размером 9,5 МБ, которые были обработаны за 3,34 секунды и полностью загружены за 3,47 секунды.

1. CanLoad Guard Test

здесь вы увидите большую разницу, когда мы использовали CanLoad Guard, так как браузер сделал только 18 запросов размером 9,2 МБ, завершил обработку за 2,64 секунды и полностью загрузил 2,59 секунды.

CanLoad Guard никогда не загружает данные модуля, если пользователь не авторизован, и это дает вам большую производительность, поскольку время загрузки сократилось почти на 1 секунду, а это огромное время при загрузке веб-страниц, без сомнения, это зависит от размера модуля.

Совет:если вы хотите провести тестирование вашего проекта, убедитесь, что Disable Cacheфлажок во вкладке сети отмечен, он отмечен на первом изображении

Другие вопросы по тегам