Ionic 3 延迟加载(Lazy Load)实战(一)

本文分享并演示了在 Ionic 3 框架中如何进行模块的延迟加载(Lazy Load)开发。
在我的实战课程「快速上手Ionic3 多平台开发企业级问答社区」中,因为开发的仿知乎 App 模块间的加载没有使用到延迟加载(懒加载,Lazy Load)的技术,而当有些同学在开发自己的 App 越来越复杂的时候,发现了模块加载的性能问题。
这时就出现了需要将模块延迟加载的需求,而 Ionic 3 的一个特性就是支持延迟加载,而且代码的变动非常小。
为了给各个阶段的同学一个开发演示,本文就直接给大家演示一下 Ionic 3 的模块延迟加载开发。
关于 Ionic 框架学习过程中遇到的各种常见问题,可以参见我从一千多个课程提问中给大家整理出来的常见问题 Q&A 文章。
1. 项目初始化
首先通过 Ionic CLI 新建一个空项目,命令为 ionic start lazyLoad blank。

空项目启动后如下图所示。

在 src/app/app.module.ts 文件中的 declarations 与 entryComponents 节点下可以看到 Ionic 自动声明了 MyApp 与 HomePage 两个模块。

这样的默认配置方式,就会让所有声明的页面模块在 App 启动时一次加载起来,可能会造成相关的性能问题。
2. 模块的延迟加载
我们首先删除 src/app/app.module.ts 文件中的 HomePage 模块的声明以及调用。
然后在文件 src/pages/home/home.module.ts 中去单独定义 HomePage 模块的声明,代码如下图所示。

并修改 src/pages/home/home.ts 添加 @IonicPage 装饰器的导入与调用,代码如下图所示。

并修改 src/app/app.component.ts 文件中的 rootPage 的定义。
rootPage:any = 'HomePage';
至此,我们就轻松地配置好了 HomePage 模块的延迟加载功能。
3. 测试延迟加载
我们打开 Chrome 的网络监控模板,刷新 App,可以看到 JavaScript 文件的请求与加载。

main.js 文件是整个 App 框架以及相关依赖的打包文件,而 0.js 就是分离后的 HomePage 模块的代码,我们可以看到对应的模块已经在 main.js 之后进行了延迟加载。
而当你的 App 包含非常多页面的时候,你肯定不希望所有的页面模块一次都打包在 main.js 中并一次请求加载进来,所以,延迟加载可以实现「用到哪个页面模块就去加载哪个模块的代码」,可以大大提高 App 的运行性能。
后续的文章我们还将深入探究延迟加载的原理以及更加复杂的应用场景。
Ionic 3 延迟加载(Lazy Load)实战(一)的更多相关文章
- Hibernate延迟加载Lazy
Hibernate延迟加载Lazy 延迟加载(lazy load)又称为懒加载,延迟加载的机制是为了避免一些无谓性能的开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作 如 ...
- Lazy Load, 延迟加载图片的 jQuery 插件.
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...
- jQuery延迟加载插件(Lazy Load)详解
最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...
- 延迟加载图片的 jQuery 插件:Lazy Load
网站的速度非常重要,现在有很多网站优化的工具,如 Google 的Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it这个工具对图片进行批量压缩,但是对 ...
- Lazy Load 图片延迟加载(转)
jQuery Lazy Load 图片延迟加载来源 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. ...
- jQuery Lazy Load 图片延迟加载
基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. 版本: jQuery v1.4.4+ jQuery ...
- Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- about hibernate lazy load and solution
about hibernate lazy load is that used when loaded again.it can increase efficienty and sava memory. ...
- 提示29. 怎样避免延迟加载或Load()阅读器问题
提示29. 怎样避免延迟加载或Load()阅读器问题 如果你有如下这样的代码: 1 var results = from c in ctx.Customers 2 where c.SalesPerso ...
随机推荐
- [20171124]手工使用Seed_Database.dfb和Seed_Database.ctl建库.txt
[20171124]手工使用Seed_Database.dfb和Seed_Database.ctl建库.txt --//昨天看yueli34的帖子,链接http://www.itpub.net/thr ...
- ES 使用小结
ES 是 Elastic Search 的缩写,可以理解为一个支持分布式部署的软件. 部署了以后可以当数据库用,虽然官方不建议这样做,但我们是这样干的. 它解决了很多场景下的查询需求,发版速度飞快,用 ...
- 手把手教你解析Resources.arsc
http://blog.csdn.net/beyond702/article/details/51744082 一.前言 对于APK里面的Resources.arsc文件大家应该都知道是干什么的(不知 ...
- Tribonacci UVA - 12470 (简单的斐波拉契数列)(矩阵快速幂)
题意:a1=0;a2=1;a3=2; a(n)=a(n-1)+a(n-2)+a(n-3); 求a(n) 思路:矩阵快速幂 #include<cstdio> #include<cst ...
- php获取两个数组相同的元素(交集)以及比较两个数组中不同的元素(差集)
(一)php获取两个数组相同元素 array array_intersect(array $array1, array $array2, [, array $...]) array array_ ...
- Arduino IDE for ESP8266 (4)局域网 网页图形化控制灯 路由系统
用到的路由系统文件(备用) 链接:https://pan.baidu.com/s/1bqR7Lc7 密码:7w2z 教程http://www.windworkshop.cn/?p=1274
- 遇到的web请求错误码集合与解释
302 临时移动.与301类似.但资源只是临时被移动.客户端应继续使用原有URI
- WaitForSingleObject的详细用法
在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObj ...
- MATLAB——径向基网络拟合曲线和分类
1.:.:; rand('state',pi); %指定状态,产生相同的随机数 T=sin(*P)+rand(,length(P)); % 给正弦函数加噪声 plot(P,T,'o') % net=n ...
- nginx-1.13.12 源码配置清单
configure命令支持以下参数: --help打印帮助信息. --prefix=安装路径定义一个将保留服务器文件的目录.这个相同的目录也将被用于由configure(由库源创建的路径除外)和ngi ...