有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文主要介绍如何在使用 SDWebImage 时通过集成 CIDownloader 网络库进行网络优化。
CIDownloader 网络库接管图片加载网络层,并新增了如下功能:
1. 在网络层新增了 HTTPDNS,有效避免由于运营商传统 LocalDNS 解析导致的无法访问最佳接入点的方案。原理为使用 HTTP 加密协议替代传统的 DNS 协议,整个过程不使用域名,大大减少劫持的可能性。
2. 在网络层接入 QUIC,提升弱网加载图片成功率,增强用户体验。
3. SDK 内部增加了重试机制,并支持自定义重试次数以及重试间隔时间,用于降低因为网络波动造成图片加载失败的风险。
4. 自定义加载图片并发数。
说明:
SDK 版本需要大于等于 v1.5.0。

安装 SDWebImage 和 CIDownloader 库

SDWebImage 是一个知名开源的图片缓存库。更多信息,请参见 SDWebImage 官网文档
podfile 文件中添加:
pod 'CloudInfinite/CIDownloader' // 自定义网络层 + SDWebImage

导入头文件

#import "CIDNSLoader.h"
#import "CIImageDownloader.h"
#import "SDWebImage-CloudInfinite.h"
#import "QCloudQuicConfig.h"

配置 CIImageDownloader

指定哪些场景使用 CIImageDownloader 进行下载解码图片。
// return YES; 表示用 CIImageDownloader ,
// return NO; 表示不用 CIImageDownloader ,用 SDWebImage 默认下载器。
// 默认只有 TPG、AVIF 图片使用 CIImageDownloader。
[CIImageDownloader sharedDownloader].canUseCIImageDownloader = ^BOOL(NSURL * _Nonnull url, SDWebImageOptions options, SDWebImageContext * _Nonnull context) {
return YES;
};

配置 HTTPDNS

1. 接入 HTTPDNS,首先需要在 Podfile 文件中添加 HTTPDNS 库依赖。
pod 'CloudInfinite/CIDNS' // DNS 模块,内部已封装腾讯 HTTPDNS
2. 设置 HTTPDNS 参数
DnsConfig config;
config.appId = @"appId";
config.dnsIp = @"1.1.1.1";
config.dnsId = 000000;
config.dnsKey = @"dnsKey"; // des 的密钥
config.encryptType = HttpDnsEncryptTypeDES;
config.debug = YES;
config.timeout = 5000;
self.dnsloader = [[CIDNSLoader alloc] initWithConfig:config];
[QCloudHttpDNS shareDNS].delegate = self.dnsloader;

配置重试

SDK 内部已默认重试3次间隔1s。
[CIImageDownloader sharedDownloader].retryCount = 2;
[CIImageDownloader sharedDownloader].sleepTime = 2;
// 可选配置,SDK 内部已有默认筛选
[CIImageDownloader sharedDownloader].canUseRetryWhenError = ^BOOL(QCloudURLSessionTaskData * _Nonnull task, NSError * _Nonnull error) {
// 指定哪些错误需要重试
return YES;
};

配置 QUIC

说明:
若使用 QUIC,请点击这里联系技术人员添加白名单。
1. 接入 QUIC,首先需要在 Podfile 文件中添加 QUIC 库依赖。
pod 'CloudInfinite/Quic' // QUIC 模块
2. 开启 QUIC。
[CIImageDownloader sharedDownloader].enableQuic = YES;
// 配置 QUIC 白名单,指定哪些 host 可用 QUIC ,不指定并开启 则表示全部使用 QUIC
[CIImageDownloader sharedDownloader].quicWhiteList = @[@"examples-1251000004.cos.ap-shanghai.myqcloud.com"];
[QCloudQuicConfig shareConfig].race_type = QCloudRaceTypeQUICHTTP;

配置并发量

customConcurrentCount 当前并发数量。maxConcurrentCount SDK 内会根据当前网络状态冬天调整并发数量,最小1,最大 maxConcurrentCount。
// 可选配置,SDK 内默认并发3,最大并发6。
[CIImageDownloader sharedDownloader].customConcurrentCount = 5;
[CIImageDownloader sharedDownloader].maxConcurrentCount = 10;