2012-07-18 24 views
15

मैंने गिटहब पर एक प्रोजेक्ट बनाया है, इसलिए मैं अपने आईओएस ऐप्स के लिए नेटवर्किंग को अनुकूलित करने का तरीका सीख सकता हूं। मैंने ब्लॉक और जीसीडी का भारी इस्तेमाल किया है और पिछले वर्षों से डब्ल्यूडब्ल्यूडीसी 2012 वीडियो और वीडियो देखने के बाद मैंने सीखा है कि मैं NSOperationQueue के साथ और अधिक करने में सक्षम हो सकता हूं। विशेष रूप से मैं समवर्ती संचालन (नेटवर्क कनेक्शन) की संख्या को नियंत्रित कर सकता हूं और साथ ही संचालन रद्द कर सकता हूं। मैं 1, 2, 4, 8 और 16 समवर्ती संचालन की अनुमति देने के साथ प्रयोग कर रहा हूं और मुझे दिलचस्प परिणाम देख रहे हैं जिनकी मुझे पूरी उम्मीद नहीं थी। मैं परिणामों को माप रहा हूं लेकिन मुझे आश्चर्य है कि अगर मुझे और मापना चाहिए तो मुझे आश्चर्य होगा।मैं आईओएस पर नेटवर्किंग को बेहतर तरीके से अनुकूलित कैसे कर सकता हूं?

आप यहाँ नमूना परियोजना पा सकते हैं:

https://github.com/brennanMKE/OptimizedNetworking

जब से मैं NSURLConnection का async एपीआई वहाँ क्योंकि एपीआई के लिए इंतज़ार कर समय भी पर्याप्त मात्रा में खर्च करता है कई समवर्ती कनेक्शन होने के लिए लाभ के बहुत सारे है उपयोग कर रहा हूँ HTTP पैकेट पहले मेरा कोड डाउनलोड करने के लिए वस्तुओं की एक सरणी से शुरू होगा और उन सभी को अनुक्रमिक रूप से अनुरोध करेगा, जो सहमति के लाभों को रोकता है। मैं नेटवर्क कनेक्शन रद्द करने के लिए नोटिफिकेशन का भी उपयोग कर रहा हूं। अब मैं ऑपरेशन के माध्यम से इस परियोजना के साथ ऐसा कर सकता हूं और मैंने उन्हें प्राथमिकता और एक श्रेणी के लिए मूल्य का उपयोग करने के लिए सेट अप किया है ताकि मैं डाउनलोड को प्राथमिकता दे सकूं और सॉर्ट कर सकूं और संचालन की श्रेणी रद्द कर सकूं। मैं प्रत्येक दृश्य के लिए एक श्रेणी का उपयोग करना चुन सकता हूं और जब कोई उपयोगकर्ता दृश्य को छोड़ देता है तो उस दृश्य के लिए सभी परिचालनों को श्रेणी का उपयोग करके रद्द कर दिया जाएगा। यह सक्रिय दृश्य के लिए संसाधनों को मुक्त कर देगा।

अधिक समवर्ती परिचालनों का उपयोग करने में एक चिंता सीपीयू उपयोग के साथ-साथ आई/ओ है, लेकिन मुझे इन मूल्यों को आईओएस के साथ मापने के तरीके से अवगत नहीं है। सीओएस उपयोग दिखाने के लिए आईओएस में "डब्ल्यू" कमांड के बराबर उपयोगी हो सकता है। मैं आई/ओ के बारे में कम चिंतित हूं लेकिन यह मापना अधिक व्यापक होगा।

नेटवर्किंग करने के तरीके के साथ मेरा मुख्य मुद्दा एक उत्तरदायी यूआई था। मैंने पाया कि मैं जो कर रहा हूं वह यूआई को सुस्त बना देता है। यह नया दृष्टिकोण एक बहुत बड़ा सौदा करने में मदद कर सकता है, लेकिन केवल अगर मैं समवर्ती परिचालनों की संख्या को नीचे रखता हूं। संचालन की इष्टतम संख्या कनेक्शन के प्रकार (3 जी, वाईफाई, आदि) से भिन्न हो सकती है, इसलिए कनेक्शन प्रकार की जांच करने से कुछ अनुकूलन हो सकते हैं।

यदि आप अपने ऐप में नेटवर्क संचार को तेज करने के बेहतर तरीके से रुचि रखते हैं तो कृपया इस नमूना प्रोजेक्ट को आजमाएं और अन्य तरीकों का सुझाव दें कि मैं प्रदर्शन को माप सकता हूं और संचार को और अनुकूलित करने के तरीकों की पेशकश कर सकता हूं। (यह भी ध्यान दें कि मैं ऐप्पल नमूना प्रोजेक्ट एमवीसीनेटवर्किंग के साथ-साथ ASIHTTPRequest प्रोजेक्ट का संदर्भ दे रहा हूं।

मैं आगे क्या कर सकता हूं, डाउनलोड किए गए डेटा की मात्रा को कुल करने और कुल राशि के साथ उस राशि का लॉग रखना है डाउनलोड पूरा करें।

README फ़ाइल की मदद करनी चाहिए परियोजना की व्याख्या और यह कैसे काम करता है।

+1

+1, प्रयास, और दिलचस्प कुंआ। – CodaFi

+1

यदि आप जिथब, एनएसओपरेशन-वेबफैच-मेडईसी पर अपनी परियोजना को देखते हैं, तो एक सहायक वर्ग है जो आपके लिए संचालन का प्रबंधन करता है। मैं बड़ी सफलता के साथ स्टोर में दो ऐप्स में इस सटीक कोड का उपयोग कर रहा हूं, और मैं अक्सर कतार में 100 से अधिक संचालन जोड़ता हूं। ध्यान दें कि लोड प्रबंधित करने के लिए आईएसओ NSOperationsQueue के साथ मिलकर काम करता है। मैं मुख्य धागे के कारण किसी भी प्रभाव को कभी नहीं देखता हूं। –

+0

कोडफ़ी धन्यवाद। @ डेविड एच ने आपके प्रोजेक्ट को फोर्क किया है और यह देखने के लिए इसे देखेगा कि मैं इससे क्या सीख सकता हूं। धन्यवाद। – Brennan

उत्तर

3

इस मदद करता है, तो MKNetworkKit में NSOperationQueue अधिकतम कनेक्शन आकार सेट करने से पहले Mugunth कुमार वास्तव में गम्यता वर्ग का उपयोग कर कनेक्शन का प्रकार की जाँच करता है

+0

क्विन "एस्किमो" के मुताबिक आपको कनेक्शन के प्रकार (वाईफाई, 3 जी, एज इत्यादि) पर अपने नेटवर्किंग का आधार नहीं बनाना चाहिए, बल्कि निर्णय लेने के लिए डाउनलोड की गति को मापना चाहिए। समवर्ती परिचालनों की संख्या के लिए आईपॉड, आईफोन और आईपैड के लिए मीट्रिक में भी दिलचस्पी है। मैं एमकेनेटवर्ककिट की जांच करूंगा। – Brennan

+0

हालांकि मैं सहमत हूं कि मैं आगे बढ़ने का लाभ देख सकता हूं कि हम एक ईडीजीई नेटवर्क पर हैं और अधिकतम डाउनलोड गति शायद अधिकतम 1-2 नेट ऑपरेशन कतार लेती है। डी/एल की गति को मापने से पहले यह संभव जांच बढ़ सकती है। अगर कुछ धारणा गलत थी तो हम वर्तमान थ्रूपुट के आधार पर समायोजन कर सकते हैं। – IanStallings

+1

मेरे नमूना ऐप के साथ मैं विभिन्न परिदृश्यों के आंकड़े दिखाने के लिए प्रदर्शन को ट्रैक करने की योजना बना रहा हूं। मैं शायद सभी इतिहास के सारांश की अनुमति देने के परिणामों के चलते तालमेल रखने के लिए कुछ कोर डेटा एकत्र करूंगा। इससे आगे अनुकूलित करने के तरीके प्रकट हो सकते हैं। – Brennan