首页 > 解决方案 > 包 cached_network_image 是否会减少 Firestore 存储的网络带宽量?

问题描述

目前,我正在从包含 Firebase Cloud Storage 的图像 URL 的 firebase 文档中读取图像 URL,然后使用包cached_network_image 将图像加载给用户。

我的问题是,cached_network_image由于许多图像将从缓存而不是 url 加载,因此用于加载图像会减少网络带宽吗?如果没有,那么如何实现这一目标?

标签: imagefirebasefluttercachinggoogle-cloud-storage

解决方案


正在使用缓存机制,该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 找到缓存文件并且该文件有效,它将使用该文件而不是下载。


推荐阅读