当前位置: 首页 > 科技观察

Angular性能优化实践——第三方组件和懒加载技术的巧妙运用

时间:2023-03-14 10:17:33 科技观察

应该有很多人抱怨过Angular应用的性能问题。事实上,在构建Angular项目时,通过使用打包、延迟加载、变更检测策略和缓存技术,辅助第三方组件,可以有效提升项目性能。为了帮助开发者深入理解和使用Angular,本文将以我们客户中最典型的业务场景——在线表单编辑为例,演示如何使用懒加载技术实现Excel和数据的在线导入导出。一个基于Angular的框架在线报告功能。环境准备全局安装AngularCLI:npminstall-g@angular/cli使用AngularCLI创建一个新项目:ngnewspread-sheets-angular-cli下载SpreadJSNpm包:npminstall@grapecity/spread-sheets;npminstall@grapecity/spread-sheets-angular在angular.json中配置SpreadJSCS在Angular应用中使用SpreadJS使用AngularCLI构建并运行项目完成以上环境搭建后,表格编辑器组件就可以集成到Angular项目中实现在线导入并导出Excel和在线数据报表等功能。在开始优化之前,我们先分析一下影响项目性能的因素有哪些。项目性能影响因素集成SpreadJS表格组件后,项目公式数据处理速度达到预期,页面运行流畅。但发布后,用户打开页面的加载时间比开发环境长,带来较差的用户体验。经过排查,发现在Angular的默认情况下,NgModule是敏锐加载的,即在应用加载的时候会尽快加载。无论是否立即使用,所有模块都会一起加载。因此,对于多路由的大型应用,推荐使用懒加载——NgModule的按需加载模式。延迟加载可以减少初始包的大小,从而减少加载时间。什么是延迟加载?在Web应用中,系统的瓶颈往往在于系统的响应速度。如果系统响应太慢,用户就会抱怨,系统的价值就会大打折扣。懒加载会在第一次加载时加载必要的模块,而其他暂时不用的模块则不会加载。比如在商城系统中,当用户打开首页时,只需要展示商品,此时不需要支付模块,支付模块可以使用懒加载技术。项目优化1.划分业务模块懒加载Angular模块,需要在AppRoutingModule路由中使用loadchildren代替component进行配置。在lazy模块的routes模块中,添加一条指向该组件的路由。该演示中有两个延迟加载模块。2、创建导航UI虽然可以直接在地址栏输入网址,但是最好有一个导航UI。三个a标签分别代表首页和两个需要懒加载的模块。3.导入和路由配置CLI会自动将各个特性模块添加到应用级路由映射表中,最后通过添加默认路由来完成。4.在功能模块内部,我们查看lazy-webexcel.module.ts文件并导入lazy-webexcel-routing.module.ts和lazy-webexcel.component.ts文件。@NgModule的imports数组列出了LazyWebExcelRoutingModule,让LazyWebExcelModule可以访问自己的路由模块。另外,LazyWebExcelComponent属于LazyWebExcelModule。设置path为空,因为AppRoutingModule中的path已经设置好了,LazyWebExcelRoutingModule中的route已经在lazywebexcel的上下文中了。另一个模块的配置也类似,这里不再赘述。5.确认有效我们可以通过Chrome的开发者工具的Network选项卡来确认这些模块是延迟加载的。点击DesignerComponentLazyLoad,可以看到出现下图的文件,说明已经准备好了,特性模块懒加载成功。总结经过优化,可以有效减少首屏加载时间。另外,再说说forRoot和forChild。CLI会将RouterModule.forRoot(routes)添加到AppRoutingModule的导入数组中。这让Angular知道AppRoutingModule是一个路由模块,而forRoot()表明这是根路由模块。它配置所有传入路由,让您访问路由器指令,并注册路由器。CLI还将RouterModule.forChild(routes)添加到每个功能模块。这样Angular就知道这个路由列表只负责提供额外的路由,被设计成作为一个特性模块使用。您可以在多个模块中使用forChild()。以上就是SpreadJS结合Angular框架,使用懒加载技术优化在线Excel项目的主要过程。除了懒加载,Angular还提供了很多性能优化的方法,比如浏览器缓存策略、RxJS、TreeShaking、使用AoT编译等。使用这些技术可以提升你项目的性能,为用户提供更好的使用体验。