programar para libro google espaƱol desde descargar cero apple ios performance swift3 response

para - Comprobando el tiempo de respuesta de API en iOS usando Swift 3?



swift apple (1)

Sé para probar que el tiempo de respuesta de la API se hace básicamente por el servidor o por el lado de Backend, pero como estoy trabajando para una aplicación, también debo verificar el tiempo de respuesta de la API desde iOS End.

Cómo puedo hacer esto ? He leído algunos enlaces donde dice hacer esto usando el inicio del temporizador y el final del temporizador y luego encuentro el tiempo de respuesta por endTime - startTime, pero esto no parece práctico.

Quiero usar Xcode (incluso si XCTest está allí).

Aquí está mi uno de API (escribí todo el método de consumo del servicio web en clases separadas en la clase ApiManager):

LoginVC :

//Call Webservice let apiManager = ApiManager() apiManager.delegate = self apiManager.getUserInfoAPI()

ApiManager :

func getUserInfoAPI() { //Header let headers = [ "Accept" : "application/json", "Content-Type" : "application/json", ] //Call Web API using Alamofire library AlamoFireSharedManagerInit() Alamofire.request(HCConstants.URL, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { response in do{ //Checking For Error if let error = response.result.error { //Stop AcitivityIndicator self.hideHud() //Call failure delegate method //print(error) self.delegate?.APIFailureResponse(HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) return } //Store Response let responseValue = try JSONSerialization.jsonObject(with: response.data!, options: JSONSerialization.ReadingOptions()) as! Dictionary<String, AnyObject> print(responseValue) //Save token if let mEmail = responseValue[HCConstants.Email] as? String { UserDefaults.standard.setValue(mEmail, forKey: HCConstants. mEmail) } //Stop AcitivityIndicator self.hideHud() //Check Success Flag if let _ = responseValue["info"] as? String { //Call success delegate method self.delegate?.apiSuccessResponse(responseValue) } else { //Failure message self.delegate?.APIFailureResponse(responseValue["message"] as? String ?? HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) } } catch {print("Exception is there "} } }


No hay necesidad de un Timer , solo puede usar objetos Date . Debe crear un objeto Date que represente la fecha actual en el momento de iniciar su solicitud API y en el control de finalización de su solicitud API, use Date().timeIntervalSince(date: startDate) para calcular el número de segundos transcurridos.

Suponiendo que tiene una función para sus solicitudes que devuelve un cierre como un manejador de finalización, así es como puede medir su tiempo de ejecución:

let startDate = Date() callMyAPI(completion: { returnValue in let executionTime = Date().timeIntervalSince(date: startDate) })

Xcode en sí mismo no tiene ninguna herramienta de creación de perfiles, pero puede usar Time Profiler en los instrumentos, sin embargo, no estoy seguro si daría los resultados correctos para las funciones asincrónicas.

Solución para su función específica: puede guardar el día de startDate justo después de la llamada a la función. Luego puede medir el tiempo de ejecución en varios lugares (incluido cada uno): justo después de que finalice la solicitud de red (al comienzo del controlador de finalización) y en cada if statement justo antes de que se llame al método delegado.

func getUserInfoAPI() { let startDate = Date() ... Alamofire.request(HCConstants.URL, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { response in //calculate the time here if you only care about the time taken for the network request let requestExecutionTime = Date().timeIntervalSince(date: startDate) do{ if let error = response.result.error { self.hideHud() let executionTimeWithError = Date().timeIntervalSince(date: startDate) self.delegate?.APIFailureResponse(HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) return } //Store Response ... //Check Success Flag if let _ = responseValue["info"] as? String { //Call success delegate method let executionTimeWithSuccess = Date().timeIntervalSince(date: startDate) self.delegate?.apiSuccessResponse(responseValue) } else { //Failure message let executionTimeWithFailure = Date().timeIntervalSince(date: startDate) self.delegate?.APIFailureResponse(responseValue["message"] as? String ?? HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) } } catch {print("Exception is there "} } }