我有一个
Angular 16
应用程序,它使用 progressive web app
(PWA) 功能和 server-side rendering
。我们还将大部分组件更新为独立和延迟加载的模块。
自从 Google 最近更改了索引规则以来,我们一直在努力改进 FCP/LCP。
有没有办法在构建时缩小、压缩和删除未使用的 JS 和 CSS 文件,以确保 PWA 兼容性并实现更好的 FCP/LCP 表示法?
您的问题太复杂,很难回答。有很多变量会影响应用程序的负载性能。但我会尽力为您提供快速概述。
从技术上讲不是 Angular,但使用的捆绑器可以删除未使用的代码。如果您使用 Angular CLI 构建它,如果您正在进行生产构建,它会默认执行此操作。该功能称为 Tree Shaking,webpack 和 esbuild 都在这样做。
Tree shaking is a term commonly used in the JavaScript context for dead-code elimination.
但是,Tree Shaking 的效果在很大程度上取决于您的代码结构以及您使用的库。
仅举一些常见错误:
styles.css
。 => 尝试将样式保留在真正需要它的组件中。使用捆绑包分析器检查捆绑包大小并检查可以删除哪些内容以优化捆绑包大小的最佳方法。 仅供参考,即使对于极其复杂的应用程序,
Estimated transfer size
的缩小版也可以在 160-180kb 左右。您可以检查
Angular CLI) 构建的输出以获取当前值。但是,很可能需要额外的块来显示页面的 LCP。2. Angular 可以缩小 JS 和 CSS 代码。 (长;博士:是的) 再次由捆绑程序负责缩小。对于 Angular CLI
中进行配置。
Initial chunk files
2. Angular 可以压缩 JS 和 CSS 代码。 (长;博士:不)
压缩既不属于 Angular 也不属于捆绑者的责任。但是,通常您的 CDN 可以在传送源文件之前对其进行动态压缩。为了获得更高的压缩比,最好创建静态预压缩的 brotli 文件。虽然大多数(但不是所有)客户端都支持 brotli,但请务必仅将预压缩文件传递给支持它的客户端。
有了
The optimization option can be either a Boolean or an Object for more fine-tune configuration. This option enables various optimizations of the build output, including:
Minification of scripts and styles
Tree-shaking
Dead-code elimination
Inlining of critical CSS
Fonts inlining
server-side rendering (SSR)
Deferrable views can be used in component template to defer the loading of select dependencies within that template.