iOS - 图像存储和快速下载的最佳解决方案?

时间:2018-01-08 00:10:46

标签: ios firebase alamofire

我正在研究制作一个让用户能够上传照片的应用,然后其他用户就可以看到这些照片(以Instagram为例)。

我之前在其他应用中使用过Firebase存储来存储用户个人资料图片,但我无法让下载速度正常工作。总是有一个非常明显的延迟。

为了加快下载速度,我是否会最好地寻找像AlamoFire这样的其他产品?或者有没有办法加快firebase存储?

我将要做的事情的一般概述 - 我有一个收集视图,其中包含所有用户图像的缩略图(由于它们是缩略图,因此希望下载时间不长),然后当用户点击一个单元格时,它会转到图像全尺寸的新视图。我更担心图像被轻敲得足够快。

2 个答案:

答案 0 :(得分:1)

我非常确信,sql数据库不适合存储大型BLOB数据。存储文件的更好和合理的位置是文件系统。我建议将照片文件存储在专用的应用程序用户目录中,并将链接存储在Firebase DB中。

网络框架的选择是个人喜好的问题,它不会影响下载速度。它们只是基础NSURLConnection的包装

答案 1 :(得分:1)

用于图像下载和缓存的两个非常成熟且广泛使用的Firebase替代方案是SDWebImagePINCache

但是,过度缓慢与您选择的图像存储SDK相关的可能性不大。更多细节如下......

影响移动下载速度的因素

客户端存储解决方案应该对整体图像下载速度产生微不足道的影响。我们正在谈论毫秒差异......如果您发现使用Firebase的客户端与AFNetworking或NSURLSession下载之间存在巨大的多秒差异,那么您可能会做错事。

你没有说明"慢"是(5秒?50秒?)或者问题是wifi还是手机。

移动设备上下载速度缓慢的主要原因是:

  • 网络类型(LTE,4G,3G等)与wifi相比都具有相对较高的延迟,并且从一个网络客户端到另一个网络客户端不会有所不同。
  • 服务器的速度/容量您要从中下载。
  • 您同时尝试的并发下载次数。例如,如果您为每个表格视图单元格下载图像并且用户正在快速滚动,那么您的下载将变得非常非常慢。
  • 设备您正在进行基准测试。 iPhone X可以比iPhone 6更快,更快地下载。

建立基线下载速度

我首先建立下载图像的基线。您可以通过将笔记本电脑连接到快速wifi并执行:

来完成此操作
$ time curl <image url here> 1>/dev/null
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                               Dload  Upload   Total   Spent    Left  Speed
100 20166  100 20166    0     0  73851      0 --:--:-- --:--:-- --:--:-- 73868
curl  > /dev/null  0.02s user 0.01s system 11% cpu 0.297 total

此图像可能需要0.297秒。然后在您的应用中,下载您的下载时间,看看它们是如何叠加的。对于设备基准测试,您可以尝试使用[NSData dataWithContentsOfURL:url];直接下载。