当前位置:首页 > 编程语言 > 正文内容

在您的网站上实现Angular中的懒加载

a811625533年前 (2023-02-05)编程语言22

是一个由谷歌开发的前端框架,用于构建可扩展的企业级 *** 应用。其中一些应用程序会变得相当大,影响你的应用程序的加载时间。

为了减少加载时间,改善用户的整体体验,你可以使用一种被称为懒人加载的技术。这个原生的Angular功能允许你只先加载 *** 应用的所需部分,然后根据需要加载其他模块。

在这篇文章中,你将了解Angular懒加载以及它如何帮助加快你的Angular *** 应用。

什么是懒加载?

是指只在需要时才加载网页元素的技术。与之相对应的是急于加载,当所有东西都加载–或试图加载–的时候。急切地获取所有图像、视频、CSS和JavaScript代码可能意味着漫长的加载时间,这对用户来说是个坏消息。

懒加载通常用于承载大量内容的网站上的图像和视频。与其一次性加载所有媒体(这将使用大量带宽并阻碍页面浏览),不如在这些元素在页面上的位置即将滚动进入视野时再加载它们。

Angular是一个单页应用框架,它的大部分功能依赖于JavaScript。随着应用程序的增长,你的应用程序的JavaScript *** 很容易变得很大,这也伴随着数据使用和加载时间的相应增加。为了加快速度,你可以使用懒加载来首先获取所需的模块,并将其他模块的加载推迟到需要时进行。

Angular中懒加载的好处

懒加载提供了一些好处,将使你的网站更加用户友好。这些包括:

  • 更快的加载时间: JavaScript包含显示你的页面和加载其数据的指令。正因为如此,它是一种阻碍渲染的资源。这意味着在渲染你的页面之前,浏览器必须等待加载所有的JavaScript。在Angular中进行懒加载时,JavaScript被分割成若干块,分别加载。最初的块只包含页面的
  • 主要模块所需的逻辑:它被急切地加载,然后其余的模块被懒散地加载。通过减少初始块的大小,你将。
  • 更少的数据使用: 通过将数据分成几块并根据需要加载,你可能会使用更少的带宽。
  • 节约浏览器资源:由于浏览器只加载需要的数据块,它不会浪费内存和CPU来解释和渲染不需要的代码。

在Angular中实施懒加载

要跟上本教程,你将需要以下东西:

  • 安装
  • 具备Angular的基本知识

提升你的项目

你将使用来创建你的项目。你可以通过运行以下命令用来安装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 参数而不是 componentloadChildren 参数告诉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中是CommandOptionI)。

选择  ***  过滤器,只查看通过 *** 加载的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等技术,将提高你的网站性能和用户的满意度。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/7944.html

分享给朋友:

“在您的网站上实现Angular中的懒加载” 的相关文章

什么是JavaScript?网络上最流行的脚本语言一瞥

什么是JavaScript?网络上最流行的脚本语言一瞥

谁在尝试访问某些网站时没有遇到过更新Java的请求? 虽然许多人通过交互式网站功能熟悉Java,但用户可能不太熟悉JavaScript——或者,实际上,他们可能错误地认为两者是相同的。 在本文中,我们将讨论JavaScript 是什么以及Java和JavaScript之间的区别。然后我们将概...

宝塔面板教程之不同环境安装篇

宝塔面板教程之不同环境安装篇

Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...

宝塔面板教程之计划任务篇

宝塔面板教程之计划任务篇

宝塔面板的计划任务,主要用于安排和管理需要定时执行的任务,如备份、内存清理等。其实对于大部分站长来说,主要使用该板块的备份网站、备份数据库及释放内存的三个定时任务计划。   Shell脚本的添加 输入任务名称,选择执行周期,输入执行的脚本内容。 注意事项: 输入脚本内容...

什么是Node.js以及为什么要使用它

什么是Node.js以及为什么要使用它

JavaScript是世界上最流行的编程语言之一。今天,它为数百万个网站提供支持,并吸引了成群的开发人员和设计人员为Web构建功能。如果您是编程新手,那么 JavaScript很容易成为之一。 在最初的20年里,JavaScript主要用于客户端脚本。由于JavaScript只能在<scr...

15种最佳编程字体以帮助您更愉悦地敲代码

15种最佳编程字体以帮助您更愉悦地敲代码

经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...

27个学习PHP的最佳教程(免费和付费资源)

27个学习PHP的最佳教程(免费和付费资源)

对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...