Alamofire 请求大约需要 10 秒
Posted
技术标签:
【中文标题】Alamofire 请求大约需要 10 秒【英文标题】:Alamofire requst taking around 10 seconds 【发布时间】:2016-09-28 19:00:31 【问题描述】:我已经在我的带有良好 wifi 的 Mac 和我的手机上使用 wifi/data 运行了这段代码,但我在下面的代码上加载时间非常慢。我的 UI 大约需要 7 到 10 秒才能更新,这是我在视图控制器中的第二个代码块中 ... 所在的位置。
这不是我第一次处理网络请求,而且我从来没有遇到过这种缓慢的行为。这是我第一次使用 Alamofire 和我在 downloadProfileInformation 中使用的这种完成处理程序,其中 DownloadComplete 是 () -> () 的类型。
我想问题可能出在那儿。我猜在完全下载所有内容之前它不会更新 UI,但是下载图片应该需要 10 秒吗?
https://blzgdapipro-a.akamaihd.net/game/unlocks/0x0250000000000BB0.png
这是一个可以从 API 中获取的链接示例。
我也不知道问题出在 API 上吗?我从来没有听说过这样的事情,但我不知道有什么可能。
https://api.lootbox.eu/documentation
编辑:
//Called with IBAction
PROFILE_URL = "\(URL_BASE)\(Info.sharedInstance.platform)/\(Info.sharedInstance.region)/\(Info.sharedInstance.battletag)/profile"
Alamofire.request(PROFILE_URL).responseJSON response in
let result = response.result
if let dict = result.value as? Dictionary<String,Any>
if let error = dict["error"] as? String
print(error)
else
if let data = dict["data"] as? Dictionary<String,Any>
//Assigning variables to that value
if let username = data["username"] as? String
DispatchQueue.main.async
self.battletagNameOutlet.text = username
print("battletag update happening")
if let level = data["level"] as? Int
...
if let avatarURL = data["avatar"] as? String
...
if let competitive = data["competitive"] as? Dictionary<String,Any>
....
【问题讨论】:
您正在从 backgtound 线程更新 UI。您的请求很好,但您的完成处理程序不是。这里有多个类似的问题。 @Sulthan - Alamofire 在主线程上为您运行其完成处理程序,除非您手动指定一些其他队列来运行完成块。使用NSURLSession
,您的观点会得到很好的理解,但 Alamofire 通常不会担心。
Hibernia,唯一让我惊讶的是您正在运行连续的请求,因此任何网络延迟都会成倍增加。如果您可以将其设计为处理单个请求或并发请求,您将获得性能改进。我建议您改进调试以确定延迟的哪一部分发生在哪里,然后您就可以从那里解决重新设计的问题。但是您希望在收到响应时更新 UI,而不是等待所有内容。顺便说一句,您在任何地方都没有执行任何同步请求(例如NSData(contentsOfURL:)
)?
@Rob 我没有在任何地方做任何同步请求。这可能是非常不必要的,但我只是将所有内容移出类并在主视图控制器中弹出它并划掉“完成”位。当我从字典中获取诸如级别之类的值时,我正在更新 UI 并将其包装为 DispatchQueue.main.async,但所有内容仍在尝试同时更新。
【参考方案1】:
如果您的 API 链接的 Per_Page 超过 50,通常加载需要更多时间。在处理包含图像和视频的 API 和请求时,这可能会导致延迟。
【讨论】:
以上是关于Alamofire 请求大约需要 10 秒的主要内容,如果未能解决你的问题,请参考以下文章
在 Symfony 1.4 中加载列表页面在新服务器上需要大约 10 秒