博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angular2+,路由预加载--预先加载延迟模块
阅读量:7121 次
发布时间:2019-06-28

本文共 1950 字,大约阅读时间需要 6 分钟。

  • 使用懒加载才会存在预加载的概念
  • 预加载是自己加载完了再去加载其他模块
  • 注意,是自己加载完也就是闲时再去加载

预加载指定模块

参考了很多例子,虽然实现了预加载但却是在本模块内容没加载完就会去加载延迟模块,这样就等于没有配置懒加载,所以得进行一些优化。

1. 虽然配置了预加载但却在本模块没加载完就去加载延迟模块了(bad)

├─app.module.ts

├─app.routes.ts
├─shared
       └─service
           └─preview-load.ts

preview-load.ts

import { Observable } from 'rxjs/Rx';import { PreloadingStrategy, Route } from '@angular/router';export class PreloadModules implements PreloadingStrategy {    preload(route: Route, load: Function): Observable
{ return route.data && route.data.preload ? load() : Observable.of(null); }}复制代码

app.module.ts

import { ROUTER_CONFIG } from './app.routes';import { PreloadModules } from './share/service/preview-load';...@NgModule({ imports: [    RouterModule.forRoot(ROUTER_CONFIG, {preloadingStrategy:  PreloadModules} ) ], providers: [    PreloadModules  ],复制代码

app.routes.ts

...export const ROUTER_CONFIG: Routes = [  ...  {    path: 'login',    component: RoleLoginComponent  },  {    path: 'lists',    loadChildren: './tables/tables.module#TablesModule',     data: { preload: true }   }];复制代码

实测:

  • 在250ms的时候页面没有渲染好并且没有加载延迟加载的table模块

  • 在2.55s的时候文件加载完成并开始渲染页面,这时候已经加载了table模块的js了,这就违背了预先加载延迟模块的初衷了。所以得治~

2. 闲时再加载延迟模块(good)

部分文件、结构和上面一样,只对preview-load.ts文件做一些更改

import { Observable } from 'rxjs/Rx';import { PreloadingStrategy, Route } from '@angular/router';import { Injectable, NgZone } from '@angular/core';export function requestIdle(zone: NgZone) {  const win: any = window;  if (win.requestIdleCallback) {    return (fn) => win.requestIdleCallback(fn);  }  return (fn) => zone.runOutsideAngular(() => win.setTimeout(fn, 10));}@Injectable()export class PreloadModules implements PreloadingStrategy {  constructor(    private zone: NgZone  ) { }  preload(route: Route, fn: () => Observable
): Observable
{ requestIdle(this.zone)(fn); return Observable.of(null); }}复制代码

看结果

  • 在2.92s的时候页面渲染完成那一刻还是没有加载table模块

  • 在所有加载完之后开始加载table模块

如果觉得文章不错,不妨点个赞。

首发于。

转载地址:http://mhiel.baihongyu.com/

你可能感兴趣的文章
广州Uber优步司机奖励政策(1月18日~1月24日)
查看>>
(笔记)Mysql命令insert into:向表中插入数据(记录)
查看>>
欢聚时代一面
查看>>
利用java concurrent 包实现日志写数据库的并发处理
查看>>
ADB高级应用
查看>>
HDU3572_Task Schedule(网络流最大流)
查看>>
Tcl 简单介绍及特性
查看>>
c#中单元测试
查看>>
Codeforces Round #342 (Div. 2) B. War of the Corporations 贪心
查看>>
Oracle 经常使用的改动语句
查看>>
基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
查看>>
使用linq对字符串1,2,3,4,5,6,7,8,9,10求和
查看>>
POJ3977 Subset 折半枚举
查看>>
<转>C++ explicit关键字详解
查看>>
网络请求之GET、POST请求
查看>>
[I2C]pca9555应用层测试代码
查看>>
用C3P0建立server与数据库的连接
查看>>
3D Slicer Programmatically Set Slice Offset and Intersections 用代码修改Slicer中的切片偏移和交叉点显示...
查看>>
【转】Jenkins怎么启动和停止服务
查看>>
php通过shell调用Hadoop的方法
查看>>