2015-02-11 8 views
20

मैं स्विफ्ट पर कुछ शोध कर रहा हूं, और यह उद्देश्य-सी के साथ अंतर है। जो मैं इकट्ठा कर सकता हूं, स्विफ्ट का वर्तमान संस्करण काफी तेज़, तेज़ तब भी उद्देश्य-सी: see here है।स्विफ्ट बनाम उद्देश्य-सी: ऐप प्रदर्शन

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

उत्तर

22

There is a great blog-post स्विफ्ट प्रदर्शन में सुधार के बारे में विशेष रूप से स्विफ्ट 1.2 रिलीज के बाद।

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

'असली' प्रदर्शन के अलावा, इसके बारे में मेरा व्यक्तिगत अनुभव यह है कि मैं स्विफ्ट में बहुत आसान विकास कर रहा हूं। मुझे उद्देश्य-सी से .h और .m फ़ाइलों को कभी पसंद नहीं आया क्योंकि यह 'प्रोग्रामिंग का प्रवाह' बंद कर दिया। इसके अलावा मुझे लगता है कि सिंटेक्स स्वयं उद्देश्य-सी [इन ब्रैकेट के साथ] से कहीं अधिक आसान है।

तो मुझे लगता है कि, यदि आप स्क्रैच से एक नई परियोजना लिखते हैं, तो स्विफ्ट बहुत आसान, तेज़ और अधिक सुरुचिपूर्ण है। (मेरी राय)

34

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

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

स्विफ्ट को ऐप्पल से नए प्रोग्रामर से अपील करने के लिए भी विकसित किया गया है क्योंकि यह उद्देश्य-सी के मुकाबले रुबी और पायथन जैसी भाषाओं के समान है।

1

उद्देश्य-सी की तुलना में स्विफ्ट के अपने फायदे हैं: स्विफ्ट हैंडल स्ट्रिंग्स को अधिक आसानी से संभालते हैं, स्विफ्ट टुपल्स यौगिक चर की पेशकश करते हैं और साथ ही, कोडर्स को प्रकार की जानकारी और जोखिम बनाने वाली गलतियों के साथ एनोटेटिंग चर का समय बिताने की आवश्यकता नहीं होती है; ज्यादातर मामलों में, कंपाइलर उस मान से उस प्रकार का अनुमान लगा सकता है जिस पर एक चर सेट किया जा रहा है।

+2

इस उत्तर करता है पता प्रदर्शन नहीं, जो यहां सवाल है .. यह एक महत्वपूर्ण सवाल है। क्या ये भाषा विशेषताएं और कंपाइलर जादू किसी भी तरह के नुकसान के लायक हैं जो मौजूदा और तर्कसंगत रूप से समान व्यवहार्य समाधान के प्रदर्शन के लिए हैं? मुझे उन विशेषताओं को भी पसंद है, लेकिन वे हल्के प्रदर्शन लागत के लायक नहीं हैं। – Morkrom

+0

nonconstructive। ओपी ने भाषा सुविधाओं के बारे में नहीं पूछा था। जैसा कि उल्लेख किया गया है, प्रदर्शन को संबोधित नहीं किया। –

0

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

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

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

मेरे पास blog पर स्विफ्ट को अनुकूलित करने के बारे में कुछ ब्लॉग पोस्ट हैं और मैंने अक्टूबर में short talk दिया था।

0

स्विफ्ट उद्देश्य-सी की तुलना में तेज़ी से तुलना करता है; यही ऐप्पल की स्विफ्ट टीम का दावा है, और यह निश्चित रूप से सच है। हालांकि, तथ्य यह है कि आपको उत्तरदायी ऐप्स लिखने के लिए कई चीजों की योजना बनाना है। यहाँ कुछ संकेत दिए गए हैं:

  1. पूर्व छवियों के लिए अप्रयुक्त संसाधन
  2. अनुकूलन संसाधनों निकालें
  3. कैशिंग
  4. संपीड़न
  5. पुन: प्रयोज्य कोड
  6. वस्तु जीवन प्रबंधन
संबंधित मुद्दे