मेरे 'स्विफ्ट' ऐप में मेरे पास Amazon S3
बाल्टी में फ़ोटो अपलोड करने की सुविधा है। जब उपयोगकर्ता WiFi
या LTE
से कनेक्ट होता है, तो कोई समस्या नहीं है, लेकिन जब कनेक्शन थोड़ा धीमा होता है (उदाहरण के लिए 3G
), तो अपलोड में बहुत समय लगता है (एक मिनट तक) और आईफोन 15-20% खो सकता है बैटरी! मैं लगभग 200-300 केबी तक फोटो का आकार बदलता हूं, इसलिए यह कोई समस्या नहीं होनी चाहिए। कोड है कि मैं उस के लिए उपयोग करते हैं:मैं अपने स्विफ्ट ऐप से अमेज़ॅन एस 3 में डेटा अपलोड कर रहा हूं और यह बैटरी को और कुछ नहीं छोड़ता है। इससे कैसे बचा जा सकता है?
func awsS3PhotoUploader(_ ext: String, pathToFile: String, contentType: String, automaticUpload: Bool){
let credentialsProvider = AWSCognitoCredentialsProvider(regionType:CognitoRegionType,
identityPoolId:CognitoIdentityPoolId)
let configuration = AWSServiceConfiguration(region:CognitoRegionType, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest?.body = URL(string: "file://"+pathToFile)
uploadRequest?.key = ProcessInfo.processInfo.globallyUniqueString + "." + ext
uploadRequest?.bucket = S3BucketName
uploadRequest?.contentType = contentType + ext
uploadRequest?.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in
DispatchQueue.main.async(execute: {() -> Void in
if totalBytesExpectedToSend > 1 {
print(totalBytesSent)
print(totalBytesExpectedToSend)
}
})
}
let transferManager = AWSS3TransferManager.default()
transferManager?.upload(uploadRequest).continue({ (task) -> AnyObject! in
if (task.isCompleted) {
print("task completed")
}
if let error = task.error {
print("Upload failed ❌ (\(error))")
}
if let exception = task.exception {
print("Upload failed ❌ (\(exception))")
}
if task.result != nil {
let s3URL: String = "https://myAlias.cloudfront.net/\((uploadRequest?.key!)!)"
print("Uploaded to:\n\(s3URL)")
}
else {
print("Unexpected empty result.")
}
return nil
}
)
}
कुछ ऐसा है जिसे मैं गलत यहाँ क्या कर रहा हूँ की अपने मन और कैसे करने के लिए आता है इस विशाल बैटरी की खपत से बचा जा सकता है?
बस अनुमान लगा। आपके अपलोड प्रोग्रेस कॉल को कितनी बार कॉल किया जाता है? मुझे लगता है कि धीमे अपलोड के लिए यह अधिक बार होगा। तो, आप DispatchQueue.main पर बहुत सी कॉल शेड्यूल कर सकते हैं। जो संसाधन उठा सकता है और बदले में प्रगति को धीमा कर सकता है, इस मुद्दे को और बढ़ा सकता है। असल में, मैंने कई साल पहले (एक अलग, लेकिन समान परिदृश्य में) इस तरह की एक समस्या देखी थी जब हमने "अच्छी और फैंसी" प्रगति एनीमेशन जोड़ा, केवल नेटवर्क की गति को कई बार देखने के लिए, क्योंकि हमारा ऐप फिर से चित्रित करने में व्यस्त था प्रगति और वास्तविक नेटवर्किंग के लिए कोई समय नहीं था :-)। – Seva
अनुमान लगाने की कोशिश करने से आसान आप वास्तव में माप सकते हैं कि आपका ऐप इंस्ट्रूमेंट्स में टाइम प्रोफाइलर का उपयोग करके अधिकतर CPU का विस्तार कर रहा है। एक [डब्ल्यूडब्ल्यूडीसी वीडियो] है (https://developer.apple.com/videos/play/wwdc2016/418/) यह बताते हुए कि यह कैसे करें। –