ios - स्विफ्ट 3 का इस्तेमाल करते हुए आईओ में एपीआई के समय की प्रतिक्रिया की जांच?



performance swift3 (1)

Timer की कोई ज़रूरत नहीं है, आप केवल Date ऑब्जेक्ट का उपयोग कर सकते हैं। आपको अपना एपीआई अनुरोध शुरू करने के समय वर्तमान दिनांक का प्रतिनिधित्व करने वाला Date ऑब्जेक्ट बनाना चाहिए और अपने एपीआई अनुरोध के समापन Date().timeIntervalSince(date: startDate) , Date().timeIntervalSince(date: startDate) उपयोग करें Date().timeIntervalSince(date: startDate) उस सेकंड की संख्या की गणना करने के लिए

यह मानते हुए कि आपके अनुरोधों के लिए फ़ंक्शन है जो समापन हेन्डलर के रूप में बंद कर रहा है, इस तरह आप अपने निष्पादन समय को माप सकते हैं:

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

Xcode में स्वयं के पास कोई भी रूपरेखा उपकरण नहीं है, लेकिन आप उपकरण में समय प्रोफाइलर का उपयोग कर सकते हैं, हालांकि, मुझे यकीन नहीं है कि एसिंक्रोनस फ़ंक्शन के लिए सही परिणाम देगा।

अपने विशिष्ट फ़ंक्शन के समाधान: फ़ंक्शन कॉल के बाद आप startDate को सहेज सकते हैं। तब आप कई स्थानों (प्रत्येक में शामिल) में निष्पादन समय को माप सकते हैं: नेटवर्क अनुरोध समाप्त होने के बाद (पूर्णता संचालक की शुरुआत में) और प्रत्येक में if statement आपके प्रतिनिधि विधि से पहले if statement सही कहा जाता है

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 "}
    }
}

मुझे पता है कि एपीआई के प्रतिक्रिया समय का परीक्षण मूल रूप से सर्वर या बैकेंड पक्ष द्वारा किया जाता है, लेकिन जैसा कि मैं एक आवेदन के लिए काम कर रहा हूं, मुझे आईओएस एंड से एपीआई रिस्पॉन्स टाइम को चेक करना होगा।

मैं यह कैसे कर सकता हूँ ? मैं कुछ लिंक्स पढ़ता हूं जहां कहता है कि यह टाइमर शुरू और टाइमर के अंत में करने के लिए करता है और फिर अंत टाइम टाइमटाइम द्वारा प्रतिक्रिया समय लगता है लेकिन यह आसान नहीं लगता है।

मैं Xcode का उपयोग करना चाहता हूं (यहां तक ​​कि अगर XCTest है)।

यहां मेरी एक एपीआई है (मैंने लिखा है कि सभी वेब सेवा विधि को अपी मैनेजर क्लास में अलग कक्षा में लेती है):

लॉग-इनवीसी :

//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 "}
    }
}




response