angular

Angular 6 的预加载与懒加载

2019-07-11  本文已影响0人  曼珠沙华_521b

angular的文件越来越大,导致用户体验差,使用预加载与懒加载

懒加载场景:

应用在启动时,某些模块不需要,就可以在某些模块中使用懒加载
优点:使用懒加载后,只加载必须的模块,可以加快启动速度。
缺点:懒加载时可以提高用户的初始体验,但是在某个模块体积过大时,还是会发生堵塞现象,导致用户的体验下降

预加载场景

当应用启动后,后续功能模块可能会使用,再基础模块加载后,加载其他的预加载模块,这样在点击预加载模块事,体验非常好。

代码

在使用预加载时,要分为几个Module.拆分Module,在这之前要先传创建上3个模块,供预加载使用
在app-routing.module.ts中定义路由模块

path:"index",
component:indexComponent,
children:[
  {
   path:"home",
   loadChildren:"./home/home.module#HomeModule",//懒加载
  data:{preload:true},//预加载判断
  },
  {
   path:"info",
   loadChildren:"./info/info.module#InfoModule",//懒加载
  data:{preload:true},//预加载判断
  },
  {
   path:"pay",
   loadChildren:"./pay/pay.module#PayModule",//懒加载
  data:{preload:true},//预加载判断
  },
]

定义预加载策略


新建预加载文件
selective-preloading-strategy.ts
import {PreloadingStrategy,Route}  from "@angular/router";
import {Observable} from "rxjs";
/**
预加载策略
*/

export class SelectivePreloadingStrategy implements PrelaodingStrategy{
preload(route:Route,laod:Function):Observalbe<any>{
  
return route.data && route.data['preload] ? load() :Observable.of(null)
}
}

需要加载的地方,我们执行load方法。

最后在AppModule中加入这个策略

import {RouterModule,preloadAllModules} from "@angular/router";
import  {SlectivepreloadingStrategy} from "./select/selcetive-preloading-strategy.ts"
appRoutes是app-routing.module.ts中的路由
在imports中导入路由
RouterModule.forRoot(appRoutes,{preloadingStrategy:PreloadAllModules})
并且假如到providers:[SlectivepreloadingStrategy]

版本6.1.1
部分内容借鉴[山高路远]https://www.zhihu.com/people/sxlwar

上一篇下一篇

猜你喜欢

热点阅读