2014-11-02 5 views
13

मैं ओएस एक्स कोको प्रोग्रामिंग के लिए बिल्कुल नया हूं लेकिन इसे नई स्विफ्ट भाषा के साथ जाने का फैसला किया है।एनएसटीबलव्यू व्यू आधारित स्क्रॉलिंग प्रदर्शन

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

तब मैं Yosemite में अपग्रेड किया गया, स्क्रॉलिंग प्रदर्शन में काफी गिरावट आई है। तालिका दृश्य पर कोर एनीमेशन परत चेकबॉक्स को सक्षम करने से यह सुधार हुआ लेकिन मैवरिक्स की तुलना में अभी भी बदतर था।

योसैमेट में स्क्रॉल प्रदर्शन को बेहतर बनाने की कोशिश करने के दौरान मेरे पढ़ने के दौरान मैं "व्यू-आधारित" एनएसटीबल व्यूज़ में आया। प्रलेखन से यह कहा गया है कि सेल आधारित टेबल दृश्यों का आमतौर पर उपयोग नहीं किया जाना चाहिए और केवल विरासत परियोजनाओं के लिए समर्थित हैं।

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

प्रदर्शन आधारित NSTableviews प्रदर्शन को स्क्रॉल करने के लिए हमेशा खराब है? यदि ऐसा है तो सेब सेल आधारित NSTableviews पर उनका उपयोग करने की सलाह क्यों देता है।

इसके अलावा सफारी और रीडर 2 जैसे कुछ अनुप्रयोगों में योसैमेट में भी बटररी चिकनी स्क्रॉलिंग है। वे इसे कैसे प्राप्त करते हैं?

क्या मुझे कुछ याद आ रही है या ओएस एक्स का प्रदर्शन सिर्फ हर नई चीज़ के साथ नरक में जा रहा है? यानी

मावेरिक्स> Yosemite

कोशिका आधारित> दृश्य-आधारित

पुराने> नई

किसी भी मदद की बहुत सराहना कर रहा है। धन्यवाद!

+0

क्या आपने इस समस्या को हल किया? –

+0

नहीं। दुर्भाग्य से नहीं। मैंने विकास को रोक दिया है और इसे छोड़ने से पहले ओएस एक्स के अगले संस्करण में फिर कोशिश करेंगे। – Gavin

+0

क्या आपने रडार पर एक बग की रिपोर्ट की थी? ऐसा नहीं है कि ऐप्पल की परवाह होगी, लेकिन जिज्ञासा से बाहर। मैं वास्तव में महसूस करता हूं, वास्तव में ऐप्पल द्वारा pissed। जब तक मैं अपनी बड़ी तालिका में टेक्स्टफिल्ड्स का उपयोग करता हूं, तब तक यह चिकनी है, लेकिन एक बार जब मैं केवल एक रंगीन बॉक्स/टेक्स्टफिल्ड व्यू जोड़ता हूं तो स्क्रॉल करते समय यह सभी CPU खाने शुरू होता है। योसामेट बेकार है :-( –

उत्तर

0

हाल ही में उन्होंने "रीयूज कतार" नामक अवधारणा पेश की है, जहां केवल पंक्तियां जो वर्तमान में दिखाई दे रही हैं वास्तव में तालिका में हैं। पंक्तियों से बाहर जाने वाली पंक्तियां, जबकि स्क्रॉलिंग को नई पेश की गई पंक्तियों द्वारा प्रतिस्थापित किया जाता है। यह प्रदर्शन संवर्द्धन के लिए पेश किया गया था। लेकिन लाख x 7 विचारों पर विचार करते हुए, मुझे लगता है कि पुन: उपयोग कतार में बहुत से CPU चक्र बर्बाद हो सकते हैं।
विचारों की तुलना में कोशिकाएं हल्के वजन भी हैं।


यदि संभव हो तो आप एकाधिक तालिकादृश्यों में एकल तालिकादृश्य को पुनर्गठन कर सकते हैं। व्यावहारिक रूप से मानव को अपने दिमाग में कम से कम कुछ सरल भविष्यवाणी के साथ डेटा देखने की जरूरत है।उदाहरण के लिए, एक संगठन में आप

  1. सभी प्रबंधक विवरण देखने के लिए चाहते हो सकता है
  2. सभी कर्मचारियों को वेतन एक्स
  3. से अधिक सभी महिला कर्मचारियों

बजाय एक बिल्कुल कर्मचारी विवरण देखने में समस्या आ पहर।
इस प्रकार एक तालिका दृश्य शुरू करना, केवल आवश्यक जानकारी के साथ, प्रदर्शन और यूएक्स दोनों को बढ़ाएगा।

+0

हाँ, यह पेजिंग करने का समय है डेस्कटॉप ऐप्स पर भी लंबी सूचियों पर। मैं जीटीके लिनक्स और विंडोज जीयूआई क्लाइंट भी करता हूं और जब वे कई वस्तुओं के साथ उपयोग करते हैं तो वे सभी संसाधनों को बर्बाद कर रहे हैं और मेरा मतलब है कि 100 मेगाबाइट्स रैम की तरह। – Lothar

2

मैंने हाल ही में एक बहुत ही समान स्थिति में पाया, जिसमें एक सेल आधारित NSOutlineView है जो तेजी से पूर्व-योसामेट को उड़ा रहा था और लगभग योसामेट को अपग्रेड करने के बाद रोक दिया गया था।

मेरे अनुभव में, तालिका दृश्य पर परत-बैकिंग को सक्षम करने के लिए पर्याप्त नहीं है, आपको इसे NSScrollView के लिए सक्षम करना होगा जिसमें आपकी तालिका दृश्य शामिल है और यह NSClipView है।

उन परिवर्तनों को करने के बाद मेरी तालिका दृश्य फिर से गति पर था लेकिन कुछ अजीब दृश्य कलाकृतियों का अनुभव कर रहा था। जो आपकी स्थिति में प्रासंगिक हो सकते हैं या नहीं भी हो सकते हैं क्योंकि आप स्रोत सूची NSOutlineView का उपयोग नहीं कर रहे हैं जो योसामेट में नई कंपन/पारदर्शिता सामग्री का उपयोग करता है।

किसी भी मामले में, जैसे ही मैं एक दृश्य आधारित तालिका में परिवर्तित हो गया, "प्रभाव" दूर चला गया।

+1

मेरे पास वास्तव में NSOutlineview भी था, और आप जिस दृश्य कलाकृतियों के बारे में बात कर रहे थे उसे देख रहे थे। वे व्यू आधारित का उपयोग करते समय भी चले गए। "बुफर्ड" जोन से बाहर स्क्रॉल करने के बाद व्यू आधारित लग रहा है। जो लगभग 500 आइटम या उससे भी कम लगता है। – Gavin

+1

इसके अलावा अब भी एक समस्या है कि जब टेबल भर जाता है (स्क्रीन पर लगभग 30 प्रविष्टियां देख सकते हैं), फोकस को सक्रिय करने और फोकस को निष्क्रिय करने के लिए विंडो को लगभग 1 सेकंड लगते हैं। क्या आपके पास यह भी है, पता लगाएं कि कारण क्या है, हालांकि पूरा परत समर्थित बैक को अक्षम करने से यह ठीक हो जाता है: एस – Gavin

+0

मैंने आपके द्वारा वर्णित फोकस समस्याओं को नहीं देखा है, लेकिन योसामेट के साथ शुरू होने वाले कई अन्य अजीब मुद्दे हैं। क्या आपने अभी तक स्क्रॉल-और क्लिप-व्यू पर परत-बैकिंग सक्षम करने का प्रयास किया है? – lemonmojo

0

मुझे एक ही समस्या है। मैं सामान्य रूप से स्विफ्ट और ऐप्पल विकास के लिए भी नया हूं। मेरी परियोजना तब तक अच्छी तरह से काम कर रही थी जब तक कि मैंने 1000 या अधिक पंक्तियों को जोड़ना शुरू नहीं किया।

कुछ खेलने के बाद, मैंने इस मुद्दे को इस तरह से संकुचित कर दिया है कि मेरे शब्दकोश आधारित डेटा स्रोत का उपयोग किया जा रहा है। यह आपको सही दिशा में इंगित कर सकता है।

func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? {... 

return myDictionary.values.array[row] //-- this makes access very slow, jerky with pauses 

return myDictionary[someKey] //-- this makes access a lot faster, smooth and slick 

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

0

आप (बस (समूह सेल या) बंद करने के लिए पाठ सेल पर "पृष्ठभूमि खींचता" की जरूरत है

enter image description here

3

एप्पल के अनुसार, OSX डिफ़ॉल्ट रूप से QuartzCore सक्षम कभी नहीं आईओएस के रूप में, बजाय, कर)। तो, आपको:

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

का हवाला देते हुए एप्पल डॉक्स:

iOS एप्लिकेशन में, कोर एनिमेशन हमेशा सक्षम किया गया है और हर दृश्य एक परत से समर्थित है। ओएस एक्स में, ऐप्स को निम्नलिखित करने के द्वारा कोर एनीमेशन समर्थन को स्पष्ट रूप से सक्षम करना होगा:

क्वार्ट्जकोर फ्रेमवर्क के विरुद्ध लिंक करें।निम्न में से कोई एक करके (iOS एप्लिकेशन केवल अगर वे कोर एनिमेशन इंटरफेस स्पष्ट का उपयोग इस ढांचे के खिलाफ लिंक होना चाहिए।) आपके एक या NSView वस्तुओं के अधिक के लिए परत समर्थन सक्षम:

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

: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html

संबंधित मुद्दे