Seb*_*jas 5 ios nsurlsession swift urlsession
我想充分利用iOS上网络通话的优先级。
到目前为止,我正在使用URLSessionTask.priority。我创建如下网络呼叫:
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data, let response = response {
// Handle response
} else {
// Handle error
}
}
task.priority = priority
Run Code Online (Sandbox Code Playgroud)
问题是,我仍然看到优先级为0.0的下载任务一开始就从优先级为1.0的任务中占用了大量负载(最多〜60%)。有时,只有当大量低优先级请求完成时才开始优先级为1.0的呼叫。Apple的(文档)确认:
要向主机提供有关如何确定应用中URL会话任务优先级的提示,请为每个任务指定优先级。指定优先级仅提供提示,并不保证性能。[...]没有API可让您从主机的角度确定任务的有效优先级。
我想实现假定的下载和缓存,而又不降低用户发起的请求的性能。这对于连接不良的设备尤其重要。
我考虑过的解决方案:
n并行下载,具有优先级队列,并在高优先级请求进入时中止/暂停非常低优先级的请求。但是,对我来说,这听起来像已经必须存在,并且有点像如果实施不当,这是一种绝佳的射击方式。我考虑过的替代方法:
我支持iOS 9和更高版本,但也会考虑在iOS 9上不起作用的解决方案。
正如苹果在文档中提到的,优先级字段只是一个提示,并不能真正保证资源将如何使用。
更严格地执行网络优先级;正如您所提到的,唯一的可能性是限制并发请求的数量。这实际上就是 Alamofire 图像缓存库正在做的事情
Alamofire 不支持设置 NSURLSessionTask 优先级值之外的优先级。
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |