angular - 防止在路线更改时重新加载图像 - Angular 6
问题描述
我的 Angular 应用程序中有一个组件。它有一个 div,它的背景图像设置为组件类中的一个变量,如下所示:
<div class="home-background" [style.background-image]="'url('+ bgImage +')'">.......</div>
每当我导航到这个组件时,在 chrome 的网络选项卡中,我可以看到它每次都重新获取背景图像。图像大小为 500Kb,显示半秒空白区域。
有没有办法强制 div 使用缓存的图像,而不是在每次导航到该组件时从服务器获取它?
解决方案
我写了一篇文章,逐步解释如何将 PWA 功能注入 Angular 项目。
你可以在这里阅读更多。
正如已经建议的那样,您可以使用服务工作者来缓存资产。
如果您在 CLI 中运行以下命令(Angular 添加原理图):
ng add @angular/pwa
它将为您设置几乎所有内容(您可以在上面链接的我的文章中找到所有详细信息)。
默认情况下,上面的命令将使用惰性策略asset
缓存文件夹中的所有文件(这意味着它们将在至少被请求一次后被缓存)。
在生成的文件下方:
{
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch", <- Those files are cached immediately by the SW
"resources": {
"files": [
"/favicon.ico",
"/index.html",
"/*.css",
"/*.js"
]
}
}, {
"name": "assets",
"installMode": "lazy", <- Those files are cached after a first request
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**",
"/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
]
}
}
]
}
如果您想急切地提供这些图像并让它们即使用户离线也可用,您可以installMode: prefetch
在上一个命令为您创建的配置文件中进行设置 (ngsw-config.json)。
有了这个,您将能够从缓存中传递图像,您还可以设置生命周期。在本文中,我还描述了如何缓存 API GET 请求,如果您想进一步改进您的应用程序。
推荐阅读
- sql-server - 更新具有重复列值的多条记录
- javascript - 如何在 setInterval 中更新状态对象?[挂钩]
- python - 我写了一个 pymongo 脚本来添加示例用户,但它不工作
- python - 如何合并存储在python变量中的多个路径中的所有文件?
- java - 如何使用 Spring-Data-Redis 将对象作为值存储在 Redis 中?
- boto3 - Boto 3 (s3) 如何知道哪些对象被删除
- go - 如何在 Go 中使用 cookie jar 维护相同的会话
- javascript - 绝对元素落后于粘性/固定元素
- javascript - 如何在另一个输入值(如 facebook 评论)下显示输入值?
- c++ - 在给定输入中找到多数元素的分而治之的解决方案