首页 > 其他分享 >实现 Angular Lazy loading 时应该避免 Static Imports 的原因

实现 Angular Lazy loading 时应该避免 Static Imports 的原因

时间:2023-10-28 11:25:08浏览次数:40  
标签:Lazy loading ComponentB 静态 Imports 代码 导入 Angular 加载

在 Angular 应用开发中,Lazy loading (懒加载)是一种常用的优化技术,通过 Code splitting(代码拆分)实现。然而,在实现过程中,开发者往往会遇到一些常见的问题。本文将详细介绍在实现 Angular Lazy loading 时应该避免的错误,并提供实际的示例进行说明。

避免 Lazy-Loaded 代码的静态导入

为了实现代码拆分,你的静态 JavaScript 代码(主应用程序包)不能对任何你想要懒加载的代码进行静态导入。否则,构建器会注意到该代码已被包含,因此,它不会为其生成一个单独的代码块。这一点在从库中导入符号的情况下尤为重要。

以 Angular 9 和 Angular 10 为例,对同一库入口点的静态导入和动态导入混合使用,即使是不同的符号,也会破坏该库入口点的懒加载和树摇(tree shaking)。如果你这么做,它会将整个入口点静态地包含在构建中。因此,强烈建议你为需要静态加载的代码创建特定的入口点,并为可以懒加载的代码创建单独的入口点。

让我们通过一个具体的示例来解析这个问题。假设你的主应用程序包中有如下的静态导入语句:

import { ComponentA } from 'library';

同时,你想要在另一个模块中懒加载 ComponentB

import('library').then(m => m.ComponentB);

在这种情况下,构建器会注意到 library 已经被主应用程序包静态导入,所以它不会为 ComponentB 创建一个单独的代码块,而是将其包含在主应用程序包中。这就破坏了你的懒加载策略。

为了解决这个问题,你应该为需要静态加载的代码和可以懒加载的代码创建不同的入口点。比如,你可以创建两个库 libraryAlibraryB,其中 libraryA 包含 ComponentAlibraryB 包含 ComponentB。然后,你可以在主应用程序包中静态导入 ComponentA

import { ComponentA } from 'libraryA';

并在另一个模块中懒加载 ComponentB

import('libraryB').then(m => m.ComponentB);

这样,构建器就会为 ComponentB 创建一个单独的代码块,实现真正的懒加载。

以上就是在实现 Angular Lazy loading 时需要避免的一个重要错误。

标签:Lazy,loading,ComponentB,静态,Imports,代码,导入,Angular,加载
From: https://www.cnblogs.com/sap-jerry/p/17793837.html

相关文章

  • NLTK debug记录——"[nltk_data] Error loading xxx"下载数据集失败
    问题:运行nltk.download("xxx")时遇到连接下载失败Error解决:在gitee上下载对应的.zip词库包(如,nltk_data/pakages/copora/目录下的下载链接);NLTK下载数据集时会自动搜索某些以./nltk_data/为结尾的目录(见附注),找到一个这样的目录并确保自己有写这个目录的权限,如果上一层目录下没有n......
  • 动态库加载失败:error while loading shared libraries: xxx.so: cannot open shared o
    lddmain|grepnot由0.1动态库的工作原理可知,只要把动态库libcalc.so的绝对路径添加到动态载入器ld-linux.so的搜索路径中,那么动态载入器就可以获取到动态库libcalc.so的绝对路径,接着就可以找到动态库文件libcalc.so,将动态库文件载入内存,然后就可以使用动态库里面的代码,最终可......
  • WinForm实现Loading等待界面
    https://blog.csdn.net/qq_36240878/article/details/84024369?spm=1001.2014.3001.55061、LoaderForm窗体中添加PictureBox,然后添加Loading图片2、窗体内属性设置StartPosition:CenterScreen在屏幕中心显示TopMost:True置顶显示ShowInTaskbar:False不在任务栏显示FormBord......
  • A piece of code for loading and caching Skeleton Animation in IO task [Cocos2dx.
    /****************************************************************************Copyright(c)2017-2018XiamenYajiSoftwareCo.,Ltd.http://www.cocos2d-x.orgPermissionisherebygranted,freeofcharge,toanypersonobtainingacopyofthissoft......
  • 启动Nginx报错:error while loading shared libraries: libpcre.so.0: cannot open sha
    1.现象:输入:/usr/local/nginx/sbin/nginx报错:/usr/local/nginx/sbin/nginx:errorwhileloadingsharedlibraries:libprofiler.so.0:cannotopensharedobjectfile:Nosuchfileordirectory2.错误原因:缺少libpcre.so.0,3.进一步查看:输入:ldd$(which/usr/......
  • Spring:通过@Lazy解决构造方法形式的循环依赖问题
    一、定义2个循环依赖的类packagecn.edu.tju.domain2;importorg.springframework.context.annotation.Lazy;importorg.springframework.stereotype.Component;@ComponentpublicclassA{privatefinalBb;publicBgetB(){returnb;}@......
  • Go - Uploading a File to a Web Application
    Problem: Youwanttouploadafiletoawebapplication. Solution: Usethenet/httppackagetocreateawebapplicationandtheiopackagetoreadthefile. UploadingfilesiscommonlydonethroughHTMLforms.YoulearnedthatHTMLformshaveanencty......
  • loading效果
    css*{margin:0;padding:0;}#load{width:100%;height:100%;display:block;position:absolute;z-index:1999!important;background-color:rgba(0,0,0,0.5);}#loadmain{......
  • samtools: error while loading shared libraries: libcrypto.so.1.0.0: cannot open
     001、问题:conda安装samtools后调用出现如下报错:samtools:errorwhileloadingsharedlibraries:libcrypto.so.1.0.0:cannotopensharedobjectfile:Nosuchfileordirectory 002、解决方法(base)[root@pc1home]#find~-name"libcrypto.so.1*"##......
  • 直播平台搭建,自定义View实现loading动画加载
    直播平台搭建,自定义View实现loading动画加载先自定义一个View,继承自LinearLayout,在Layout中,添加布局控件 /** *Createdbyxiedongon2017/3/7. */ publicclassLoading_viewextendsLinearLayout{  privateContextmContext;  privateRelativeLayoutloadi......