Angular生产环境部署Heroku后首次加载缓慢,vendor.js达3MB
问题梳理
本地运行的Angular网站响应流畅,但部署到Heroku后首次启动速度极慢,后续访问才有所改善。排查发现vendor.js文件体积达3MB,首次加载耗时约10秒。已在package.json中配置如下构建参数,但问题未解决:
"build:prod": "ng build --prod --aot --vendor-chunk --common-chunk --delete-output-path --buildOptimizer", "buildOptimizer": true
优化建议
开启gzip压缩:Heroku默认未开启静态资源压缩,可通过中间件实现。如果使用Express作为服务器,安装并启用compression中间件即可:
const compression = require('compression'); app.use(compression());该操作可将大体积文件压缩至原大小的1/3左右,能显著降低加载耗时。
拆分vendor chunk+配置长期缓存:在
angular.json中将outputHashing设置为"all",让构建后的vendor文件带上哈希后缀,浏览器可长期缓存未变更的资源。同时可将体积较大的第三方库(如rxjs、Angular Material)拆分为独立chunk,避免单个vendor.js体积过大。清理无用依赖与代码:执行
ng build --prod --stats-json生成构建统计文件,再用webpack-bundle-analyzer分析依赖树,找出未使用的库或超大体积依赖,替换为轻量化方案或直接移除。比如使用lodash时,仅按需引入所需方法而非整个库。通过CDN加载第三方依赖:将Angular核心库、rxjs等大体积依赖改为CDN加载,不再打包进vendor.js。直接在
index.html中添加CDN链接,同时在angular.json的scripts数组中移除对应本地依赖,在tsconfig.json中配置路径以避免编译报错。优化Heroku部署配置:确保使用最新版本的Node.js,采用官方Node.js buildpack。设置
NODE_ENV为production,确保所有优化策略生效;同时开启Heroku依赖缓存,避免每次部署重复安装依赖。
内容的提问来源于stack exchange,提问作者Ismail Muhammad

