
是一个由谷歌开发的前端框架,用于构建可扩展的企业级 *** 应用。其中一些应用程序会变得相当大,影响你的应用程序的加载时间。
为了减少加载时间,改善用户的整体体验,你可以使用一种被称为懒人加载的技术。这个原生的Angular功能允许你只先加载 *** 应用的所需部分,然后根据需要加载其他模块。
在这篇文章中,你将了解Angular懒加载以及它如何帮助加快你的Angular *** 应用。
是指只在需要时才加载网页元素的技术。与之相对应的是急于加载,当所有东西都加载–或试图加载–的时候。急切地获取所有图像、视频、CSS和JavaScript代码可能意味着漫长的加载时间,这对用户来说是个坏消息。
懒加载通常用于承载大量内容的网站上的图像和视频。与其一次性加载所有媒体(这将使用大量带宽并阻碍页面浏览),不如在这些元素在页面上的位置即将滚动进入视野时再加载它们。
Angular是一个单页应用框架,它的大部分功能依赖于JavaScript。随着应用程序的增长,你的应用程序的JavaScript *** 很容易变得很大,这也伴随着数据使用和加载时间的相应增加。为了加快速度,你可以使用懒加载来首先获取所需的模块,并将其他模块的加载推迟到需要时进行。
懒加载提供了一些好处,将使你的网站更加用户友好。这些包括:
要跟上本教程,你将需要以下东西:
你将使用来创建你的项目。你可以通过运行以下命令用来安装CLI:
npm install -g @angular/cli
之后,像这样创建一个名为Lazy Loading Demo的项目:
ng new lazy-loading-demo --routing
该命令创建了一个新的Angular项目,并配有路由。你将只在 src/app 文件夹中工作,该文件夹包含你的应用程序的代码。这个文件夹包含你的主要路由文件,app-routing.module.ts。该文件夹的结构应该是这样的:

Angular项目的文件夹结构
接下来,你将创建一个功能模块,它将懒散地加载。要创建这个模块,请运行这个命令:
ng generate module blog --route blog --module app.module
这个命令创建了一个名为 BlogModule 的模块,同时还创建了routing。如果你打开 src/app/app-routing.module.ts,你会看到它现在看起来像这样:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [ { path: 'blog', loadChildren: () => import('./blog/blog.module').then(m => m.BlogModule) }];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
对懒加载很重要的部分是第三行:
const routes: Routes = [ { path: 'blog', loadChildren: () => import('./blog/blog.module').then(m => m.BlogModule) }];
这一行定义了路由。博客的路由使用 loadChildren 参数而不是 component。loadChildren 参数告诉Angular懒惰地加载路由–只有当路由被访问时才动态地导入模块,然后再将其返回给路由器。模块在其 routing.module.ts 文件中定义了自己的子路由,如 blog/**。你生成的博客模块看起来像这样:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { BlogComponent } from './blog.component';
const routes: Routes = [{ path: '', component: BlogComponent }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class BlogRoutingModule { }
你会注意到,这个路由文件包含一个单一的路由, ''。这是对 /blog 的解析,指向BlogComponent。你可以在这个文件中添加更多的组件并定义这些路由。
例如,如果你想添加一个组件来获取某篇博客文章的细节,你可以用这个命令创建这个组件:
ng generate component blog/detail
这就生成了博客细节的组件,并将其添加到博客模块中。要为它添加一个路由,你可以简单地把它添加到你的路由数组中:
const routes: Routes = [{ path: '', component: BlogComponent },
{path:"/:title",component: DetailComponent}];
这增加了一个路由,可解析为 blog/:title(例如,blog/angular-tutorial)。这个路由数组是懒加载的,不包括在初始捆绑中。
你可以通过运行 ng serve 并观察输出结果来轻松检查懒加载是否正常。在输出的底部,你应该得到类似这样的东西:

使用Angular的 ng serve 验证懒加载
上面的输出被分为两部分。Initial Chunk Files 是页面之一次加载时加载的文件。 Lazy Chunk Files 是懒得加载的文件。这个例子中列出了博客模块。
通过浏览器 *** 日志检查懒加载的情况
另一种确认懒加载的 *** 是使用浏览器 “开发工具”面板中的Network选项卡。(在Windows上,Chrome和Microsoft Edge中是F12,Firefox中是Ctrl-Shift-I。在Mac上,在Chrome、Firefox和Safari中是Command–Option–I)。
选择 *** 过滤器,只查看通过 *** 加载的JavaScript文件。在应用程序的初始加载之后,你应该得到类似这样的东西:

在开发工具中查看的JavaScript下载的初始日志
当你导航到 /blog 时,你会注意到一个新的块,src_app_blog_blog_module_ts.js,被加载。这意味着你的模块只有在你导航到该路线时才被请求,而且它被懒散地加载。 *** 日志看起来应该是这样的:

开发者工具记录的下载中出现了懒加载的模块
为了比较,让我们也创建一个急于加载的模块,看看它是如何影响文件大小和加载时间的。为了证明这一点,你将创建一个用于认证的模块。这样的模块可能需要急于加载,因为认证是你可能要求所有用户做的事情。
通过在CLI中运行这个命令,生成一个AuthModule:
ng generate module auth --routing --module app.module
这就生成了模块和一个路由文件。它还将模块添加到 app.module.ts 文件中。然而,与我们上次用来生成模块的命令不同,这条命令并没有添加一个懒惰的路由。它使用 --routing 参数而不是 --route <name>。这将认证模块添加到 app.module.ts 的 imports 数组中:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
AuthModule //added auth module
],
providers: [],
bootstrap: [AppComponent]
})
将AuthModule添加到你的AppModule导入数组中,意味着认证模块被添加到初始的chunk文件中,并将与主JavaScript捆绑在一起。为了验证这一点,你可以再次运行 ng serve 并观察输出:

添加认证模块后Angular的 ng serve 命令的输出
正如你所看到的,认证模块没有作为懒惰块文件的一部分被包含。此外,初始捆绑文件的大小也增加了。 main.js文件的大小几乎增加了一倍,从8 KB增加到15 KB。在这个例子中,增加的幅度很小,因为组件不包含很多代码。但是,当你用逻辑填充组件时,这个文件的大小会增加,为懒加载提供了强有力的理由。
你已经学会了如何在Angular中使用懒加载,只在需要时才获取模块。懒加载是一种很好的技术,可以改善加载时间,减少数据使用,并更好地利用你的资源。
懒加载,加上和最小化JavaScript等技术,将提高你的网站性能和用户的满意度。
谁在尝试访问某些网站时没有遇到过更新Java的请求? 虽然许多人通过交互式网站功能熟悉Java,但用户可能不太熟悉JavaScript——或者,实际上,他们可能错误地认为两者是相同的。 在本文中,我们将讨论JavaScript 是什么以及Java和JavaScript之间的区别。然后我们将概...
Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...
宝塔面板的计划任务,主要用于安排和管理需要定时执行的任务,如备份、内存清理等。其实对于大部分站长来说,主要使用该板块的备份网站、备份数据库及释放内存的三个定时任务计划。 Shell脚本的添加 输入任务名称,选择执行周期,输入执行的脚本内容。 注意事项: 输入脚本内容...
JavaScript是世界上最流行的编程语言之一。今天,它为数百万个网站提供支持,并吸引了成群的开发人员和设计人员为Web构建功能。如果您是编程新手,那么 JavaScript很容易成为之一。 在最初的20年里,JavaScript主要用于客户端脚本。由于JavaScript只能在<scr...
经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...
对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...