使用后台队列从 url 加载图像仍然不够快
Posted
技术标签:
【中文标题】使用后台队列从 url 加载图像仍然不够快【英文标题】:Image loading from url still not fast enough using a background queue 【发布时间】:2016-10-08 18:06:39 【问题描述】:我启动了一个后台队列先加载图片,然后在主队列中更新UIImageView的图片。
int i = 0;
for (UIImageView *imageView in self.featuredPhotoImageViewCollection)
dispatch_async(dispatch_queue_create("imageQueue", NULL), ^
NSURL *url = [NSURL URLWithString:[featuredPhotos[i] valueForKey:@"url"]];
UIImage *image = [UIImage animatedImageWithAnimatedGIFURL:url];
dispatch_async(dispatch_get_main_queue(), ^
imageView.image = image;
);
);
i++;
但是,它仍然不够快。有 0.5 - 1 秒的延迟。除了使用后台队列还有什么其他建议吗?
【问题讨论】:
【参考方案1】:你对后台队列的使用有误解。在您的代码中,ios 将开始执行您的后台代码,同时让主队列不做任何事情,直到完成后台代码,然后在主队列中更新您的图像视图。
因此,无论你在后台使用什么队列,这些都不会加快你的速度。
正常使用是 1)显示加载指示器, 2)后台队列做某事 3) 主队列 隐藏加载指示器 & 更新 UI
在您的情况下,我的建议是将您的 GIF 图像的快照显示为上述指标。或者您可以简单地显示指标。
或者在其他地方预加载所有 GIF 图像并在此处显示。加载多个图像总是需要一些时间。
【讨论】:
【参考方案2】:您可以使用第三方库(如 SDWebImage)来使用缓存,这样它可以将您的问题减少到仅第一次下载。它还有一些您可能会觉得有用的优先级选项。
或者您可以在到达显示图像的视图之前下载图像。
【讨论】:
【参考方案3】:如果gif是大文件,并且服务器支持多线程下载,那么你可以尝试使用dispatch_group来下载gif。
【讨论】:
以上是关于使用后台队列从 url 加载图像仍然不够快的主要内容,如果未能解决你的问题,请参考以下文章