Swift:第二次调用API时发生延迟(URLSession和Alamofire)

问题描述 投票:-1回答:1

我试图快速调用API,但是调用它时有延迟。我注意到更新视图时出现延迟,因此在每个函数中都放置了一些日志。顺便说一句,服务器的ping是大约80ms,并且我已经在DispatchQueue.main.async

中更新了视图

我尝试了URLSession和Alamofire(应该嵌入URLSession),

URLSession请求代码:

func getAPIContent(urlAPI: String, _ callbackFunction: @escaping (Data) -> ()) {
logMessage("start get API at url : " + urlAPI)

let session = URLSession.shared
let url = URL(string: urlAPI)!
let task = session.dataTask(with: url) { data, response, error in

    if error != nil || data == nil {
        print("Client error!")
        return
    }

    guard let response = response as? HTTPURLResponse, (200...299).contains(response.statusCode) else {
        print("Server error!")
        return
    }

    guard let mime = response.mimeType, mime == "application/json" else {
        print("Wrong MIME type!")
        return
    }
    DispatchQueue.main.async {
        logMessage("calling callback...")
        callbackFunction(data!)
    }        
}
logMessage("launching api task...")
task.resume()

}

Alamofire请求代码(未处理错误::)>

func getAPIContent2(urlAPI: String, _ callbackFunction: @escaping (Data) -> ()) {
logMessage("alamofire request")
let request = AF.request(urlAPI)
request.responseData { (response) in
    DispatchQueue.main.async {
        logMessage("calling callback...")
        callbackFunction(response.value!)
    }
}

}

这是我得到的典型结果(我为此日志使用了getAPIContent2():]


由/Users/lucien/Documents/table1/table1/utilities.swift调用-getAPIContent2(urlAPI:_ :)-alamofire请求

2020年5月24日星期日19:12:07中欧夏令时

由/Users/lucien/Documents/table1/table1/utilities.swift调用-getAPIContent2(urlAPI:_ :)-calling callback ...

2020年5月24日,星期日19:12:08中欧夏令时

由/Users/lucien/Documents/table1/table1/TableViewController.swift调用-displayLines(networkData :)-开始显示所有行

5月24日星期日2020年中欧夏令时19:12:08

由/Users/lucien/Documents/table1/table1/utilities.swift调用-getAPIContent2(urlAPI:_ :)-alamofire请求

2020年5月24日星期日19:12:09中欧夏令时

由/Users/lucien/Documents/table1/table1/utilities.swift调用-getAPIContent2(urlAPI:_ :)-calling callback ...

2020年5月24日,星期日19:12:14中欧夏令时

由/Users/lucien/Documents/table1/table1/AddLineViewController.swift调用-displayDestinations(allStopsData :)-开始显示目标

周日2020年5月24日中欧夏令时19:12:14

您可能会注意到,第一个调用会立即得到处理(视图会立即更新),但是第二个调用在Alamofire请求(19:12:09)和完成处理程序(19:12:14)之间有5秒的延迟。 ,因此我的界面无法快速更新。这两个视图使用相同的请求功能,但URL不同。我试图先叫第二个,然后立即处理了...

因此,我猜测这不是URL或数据问题,而是任务管理器问题?我还尝试使用静态共享TaskManager,最终得到相同的结果。

有人可以在这个问题上帮助我吗?我在网上找不到此问题。

我试图快速调用API,但是调用它时有延迟。我注意到更新视图时出现延迟,因此在每个函数中都放置了一些日志。顺便说一下,服务器的ping是... ...>

ios swift api alamofire urlsession
1个回答
0
投票

您可以通过检查响应的Request属性来调查Alamofire metrics的时间,该属性应告诉您所有网络事件的时间,而serializationDuration可以告诉您序列化网络多长时间。反应了。但是,您可能需要做更多调查以了解时间的差异来自何处,因为可能是各种各样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.