Angular性能优化之第三方组件和懒加载技术


Posted in Javascript onMay 10, 2021

概述

应该有很多人都抱怨过 Angular 应用的性能问题。其实,在搭建Angular项目时,通过使用打包、懒加载、变化检测策略和缓存技术,再辅助第三方组件,便可有效提升项目性能。

为了帮助开发者深入理解和使用Angular,本文将以在线表格编辑为例,演示如何借助懒加载技术,在基于 Angular的框架中实现在线导入导出Excel以及数据在线填报的功能。

环境准备

1.全局安装Angular CLI:npm install -g @angular/cli

2.使用Angular CLI创建一个新项目:ng new spread-sheets-angular-cli

3.下载SpreadJS Npm包:npm install @grapecity/spread-sheets;npm install @grapecity/spread-sheets-angular

4.在angular.json中配置SpreadJS CS

5.在Angular应用程序中使用 SpreadJS

6.使用Angular CLI构建和运行项目

完成上述环境搭建,便可将表格编辑器组件集成到 Angular 项目中,实现在线导入导出Excel以及数据在线填报等功能。

在开始优化之前,我们先来分析一下是什么因素影响了项目的性能。

影响项目性能的因素

在集成 SpreadJS 表格组件后,项目的公式数据处理速度符合预期,页面在运行也较为流畅。但是发布后,用户打开页面在加载时间上要比开发环境有所延长,带来的用户体验较差。经过调研,发现在Angular的默认中,NgModule都是急性加载的,也就是会在应用加载时尽快加载。无论是否要立即使用,所有模块都会一并加载。

因此,对于多路由的大型应用,建议采用懒加载——按需加载的NgModule的模式。通过懒加载可以减少初始包的尺寸,从而减少加载时间。

什么是懒加载?

在Web应用程序中,系统的瓶颈常在于系统的响应速度。如果系统响应速度过慢,用户就会出现埋怨情绪,系统的价值也因此会大打折扣。懒加载会在首次加载时,将必须的模块加载,而其余暂时用不到的模块则不会加载。例如在商城系统中,用户打开首页时,只需展示商品,此时用不上支付模块,所以支付模块就可以使用懒加载技术。

项目优化

1. 划分业务模块

要懒加载Angular模块,需要在AppRoutingModule routes中使用loadchildren替代component进行配置。

Angular性能优化之第三方组件和懒加载技术

在懒加载模块的路由模块中,添加一个指向该组件的路由。本次的demo存在两个懒加载的模块。

Angular性能优化之第三方组件和懒加载技术

Angular性能优化之第三方组件和懒加载技术

2. 建立导航UI

虽然可以直接在地址栏直接输入URL,但是有导航UI会更好用。三个a标签分别代表主页以及两个需要懒加载的模块。

Angular性能优化之第三方组件和懒加载技术

3. 导入与路由配置

CLI会将每个特性模块自动添加到应用级的路由映射表中,最后通过添加默认路由来最终完成。

Angular性能优化之第三方组件和懒加载技术

4. 特性模块内部

Angular性能优化之第三方组件和懒加载技术

我们到lazy-webexcel.module.ts文件看下,导入了lazy-webexcel-routing.module.ts和lazy-webexcel.component.ts文件。@NgModule的imports数组列出了LazyWebExcelRoutingModule,让LazyWebExcelModule可以访问他自己的路由模块。另外,LazyWebExcelComponent属于LazyWebExcelModule。

Angular性能优化之第三方组件和懒加载技术

设置path为空,因为AppRoutingModule 中的路径已经设置了,LazyWebExcelRoutingModule中的此路由已经位于lazywebexcel这个上下文中。另一个模块配置也类似,因此不再赘述。

5. 确认它正常工作

我们可以通过Chrome的开发者工具的网络页标签来确认这些模块是否懒加载。点击Designer Component LazyLoad,可以看到下图的文件出现,表示准备就绪,特性模块被惰性加载成功。

Angular性能优化之第三方组件和懒加载技术

总结

经过优化,首屏加载时间能得到有效的降低。另外,再说一下forRoot和forChild。CLI会把RouterModule.forRoot(routes)添加到AppRoutingModule的imports 数组中。这会让Angular知道AppRoutingModule是一个路由模块,而 forRoot() 表示这是根路由模块。它会配置传入的所有路由、让你能访问路由器指令并注册 Router。

CLI 还会把 RouterModule.forChild(routes) 添加到各个特性模块中。这种方式下 Angular 就会知道这个路由列表只负责提供额外的路由并且其设计意图是作为特性模块使用。你可以在多个模块中使用 forChild()。

以上就是 SpreadJS结合Angular框架,并借助懒加载技术优化在线Excel项目的主要过程。除了懒加载,Angular还提供了很多性能优化方式,如浏览器缓存策略、RxJS、Tree Shaking、使用AoT编译等,用好这些技术能让你的项目性能有所提升,为用户提供更良好的使用体验。

以上就是Angular性能优化之第三方组件和懒加载技术的详细内容,更多关于Angular性能优化的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript 动态改变图片大小
Jun 11 Javascript
js 数据类型转换总结笔记
Jan 17 Javascript
Javascript继承机制的设计思想分享
Aug 28 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
JS Replace 全部替换字符的用法小结
Dec 24 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
12 款 JS 代码测试必备工具(翻译)
Dec 13 Javascript
利用ES6语法重构React组件详解
Mar 02 Javascript
常用的 JS 排序算法 整理版
Apr 05 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 Javascript
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
微信小程序实现拍照和相册选取图片
You might like
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
php获取错误信息的方法
2015/07/17 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
打开电脑上的QQ的python代码
2013/02/10 Python
如何运行Python程序的方法
2013/04/21 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
解决Mac下使用python的坑
2019/08/13 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
python相对企业语言优势在哪
2020/06/12 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
出生医学证明样本
2014/01/17 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
农业项目建议书
2014/08/25 职场文书
工作岗位职责范本
2015/02/15 职场文书
家电创业计划书
2019/08/05 职场文书