【发布时间】:2018-09-02 22:32:43
【问题描述】:
我们有一个基于 Angular 6 构建的全新应用程序,由 apache 2.4 提供服务。
我们设置了一个本地“预渲染”实例来使网站被搜索引擎抓取,我们尝试了 Angular Universal,但我们在库兼容性方面遇到了很多问题,因此我们决定改用预渲染解决方案。
然后我们添加了 google analytcs 跟踪代码,经过几天的数据收集,我们运行了 google PageSpeed Insights 工具。
这是我们收到的 PageSpeed Insights 分数:
PageSpeed Insights 工具收到的优化建议是:
- 减少服务器响应时间:根据谷歌,页面被提供 大约 3 秒,但我想大部分时间都花在了 预渲染(调用本地预渲染实例)。显而易见的解决方案 这是缓存预呈现的页面,但我很感激任何其他 建议。
- 启用压缩:根据 google,样式文件 (*.css) 是 不压缩。如何激活压缩?我认为某种 Apache 上的过滤器应该可以完成这项工作。谁有好的配置 为此?
- 消除首屏中的渲染阻塞 JavaScript 和 CSS 内容:报告说:“您的 无需等待以下资源即可呈现页面 加载。尝试延迟或异步加载阻塞资源,或者 将这些资源的关键部分直接内联到 HTML。” 阻塞资源是 .css 和字体,所以我真的不知道 知道如何改进这一点。有什么建议吗?
- 利用浏览器缓存:报告称图像文件 (.png, .svg 等)是可缓存的,但“未指定过期时间”。再次,我 我想我需要在 Apache 上添加某种过滤器,但我总是害怕当我们发布新版本的 Angular 应用程序时会发生什么:有什么好的配置吗?
我们还使用https://tools.pingdom.com 测试了网站速度,结果如下:
- Specify a Vary: Accept-Encoding header:这里应该是解决方案 配置 apache 以将 Header Vary: Accept-Encoding 添加到 回复。根据我对 Vary 标头的了解,它允许 缓存,CDN ot 中间的其他服务器服务不同的缓存 取决于浏览器的资源版本请求 GZIP 编码与否。有谁知道这个标题的任何副作用 例如,当我们的 Angular 应用程序的新版本时 发布了吗?
- 结合外部JavaScript:几个js用于外部跟踪 工具,所以我们在这里无能为力,但 3 javascript 是 由我们的 Angular 应用程序(main.xxx.js、polyfills.xxx.js、 运行时.xxx.js)。如何在单个 js 中组合主题?
【问题讨论】:
-
对于压缩,你必须在你的服务器上激活 Gzip,这会有所帮助,并尝试在你的 Angular 应用程序中使用lazyLoading 模式以加快加载速度,仅在调用和构建其中一个路由时加载模块您的应用处于 AOT 模式,以在浏览器上获得更小的应用尺寸和更快的渲染速度
-
@FatehMohamed 感谢您关于延迟加载模块的建议,但目前该应用程序非常简单。我忘了提到应用程序是使用 --prod 标志构建的,根据文档,默认情况下使用 AOT 编译。
标签: angular performance angular6 pagespeed