image - 包 cached_network_image 是否会减少 Firestore 存储的网络带宽量?
问题描述
目前,我正在从包含 Firebase Cloud Storage 的图像 URL 的 firebase 文档中读取图像 URL,然后使用包cached_network_image 将图像加载给用户。
我的问题是,cached_network_image
由于许多图像将从缓存而不是 url 加载,因此用于加载图像会减少网络带宽吗?如果没有,那么如何实现这一目标?
解决方案
正在使用缓存机制,该cached_network_image
机制将检查是否有可用于您提供的 url 的文件,将使用缓存版本,因此它肯定会减少您的网络使用量。这是Flutter 的 SDK 中DefaultCacheManager
类中的一个函数:cache_manager.dart
Future<void> _pushFileToStream(StreamController streamController, String url,
Map<String, String> headers, bool withProgress) async {
FileInfo cacheFile;
try {
cacheFile = await getFileFromCache(url);
if (cacheFile != null) {
streamController.add(cacheFile);
withProgress = false;
}
} catch (e) {
print(
'CacheManager: Failed to load cached file for $url with error:\n$e');
}
if (cacheFile == null || cacheFile.validTill.isBefore(DateTime.now())) {
try {
await for (var response
in _webHelper.downloadFile(url, authHeaders: headers)) {
if (response is DownloadProgress && withProgress) {
streamController.add(response);
}
if (response is FileInfo) {
streamController.add(response);
}
}
} catch (e) {
assert(() {
print(
'CacheManager: Failed to download file from $url with error:\n$e');
return true;
}());
if (cacheFile == null && streamController.hasListener) {
streamController.addError(e);
}
}
}
unawaited(streamController.close());
}
如您所见,它是否可以使用您提供的 url 找到缓存文件并且该文件有效,它将使用该文件而不是下载。
推荐阅读
- tensorflow - keras 适合 tf.data.Dataset 生成器内存不足和死锁
- html - 将表单元素与弹性框单元的底部对齐,但将文本保持在顶部
- javascript - Highcharts - 如何按名称对数据进行排序?
- html - 尝试将其设置到标签右侧时,Bootstrap 4 复选框未出现
- php - Doctrine 查询生成器 - 无法生成带有非字符串列名的 IN
- scala - 如何在 2d 棋盘游戏 scala 中移动 n 个空格
- mysql - 在具有两个相同最大值的行中,更喜欢列值而不是另一个列值
- java - 显示在系统上运行的进程,但在所有计算机上,而不仅仅是在我的计算机上
- spring - 如何获取 Spring-cache 中缓存的大小?
- python - 正确编译的代码(没有错误)给出分段错误核心转储