什么是Angular CLI预算?
Budgets是Angular CLI中不太知名但非常实用的功能之一。
随着应用程序在功能上的不断增长,其大小也会增加。 预算是Angular CLI中的一个功能,允许您在配置中设置预算阈值,以确保您设置的应用程序部分保持在界限内 — 官方文档
换句话说,我们可以将Angular应用程序描述为由构建过程生成的编译后的JavaScript文件集合,称为捆绑包。 Angular预算允许我们配置这些捆绑包的期望大小。 更重要的是,如果捆绑包大小过于庞大,我们甚至可以配置触发警告或失败构建错误的阈值!
如何定义预算?
Angular预算在angular.json文件中定义。预算是每个项目定义的,这是有道理的,因为工作区中的每个应用程序都有不同的需求。
从实用的角度来看,只有为生产环境构建定义预算才有意义。 生产构建会在应用所有优化(例如摇树和代码最小化)之后创建“真实大小”的捆绑包。
糟糕了,出现了构建错误!超过了最大捆绑包大小。这是一个很好的信号,告诉我们出现了问题...
- 我们可能在我们的功能中进行了实验并没有正确清理
- 我们的工具可能出现问题并执行错误的自动导入,或者我们从建议的导入列表中选择了错误的项目
- 我们可能会在不恰当的位置从惰性模块中导入东西
- 我们的新功能非常大,无法适应现有的预算
第一种方法:您的文件是否已压缩?
一般来说,经过gzip压缩的文件仅具有原始文件大小的约20%,可以大大降低应用程序的初始加载时间。要检查文件是否已经被gzip压缩,请打开开发人员控制台的网络选项卡。在“响应标头”中,如果看到“Content-Encoding: gzip”,则表示已经完成。
如何进行gzip压缩?
如果您将Angular应用程序托管在大多数云平台或CDN中,则不必担心此问题,因为它们可能已经为您处理了这个问题。但是,如果您拥有自己的服务器(例如NodeJS + ExpressJS)提供Angular应用程序服务,则一定要检查文件是否已经被压缩。以下是在NodeJS + ExpressJS应用程序中压缩静态资产的示例。很难想象这个非常简单的中间件“compression”会将您的捆绑包大小从2.21MB减少到495.13KB。
const compression = require('compression')
const express = require('express')
const app = express()
app.use(compression())
第二种方法:分析你的Angular打包文件
如果你的打包文件大小太大,你可能需要分析一下你的打包文件,因为你可能使用了一个不适当的大型第三方包,或者忘记删除一些不再使用的包。Webpack有一个惊人的功能,可以帮助我们直观地了解webpack打包文件的组成。
获取这个图形非常简单:
npm install -g webpack-bundle-analyzer
- 在你的Angular应用中,运行
ng build --stats-json
(不要使用 --prod
标志)。通过启用 --stats-json
,你将得到一个额外的文件 stats.json
- 最后,运行
webpack-bundle-analyzer ./dist/stats.json
,你的浏览器将弹出页面 localhost:8888。尽情享受吧!
参考文献1:如何使用Angular CLI预算拯救我的一天以及如何拯救你的一天
参考文献2:四步优化Angular打包文件大小