2009-07-10 15 views
5

पिछले कुछ हफ्तों में मैं ब्लेज़डीएस का उपयोग कर जे 2 ईई बैकएंड से जुड़े फ्लेक्स फ्रंट एंड का उपयोग करके प्रोटोटाइप एप्लिकेशन का निर्माण कर रहा हूं।फ्लेक्स एक थ्रेडेड मॉडल का उपयोग क्यों करता है?

प्रोटोटाइप फ्लेक्स सीखने के लिए एक प्रयोग है और देखें कि एक जटिल व्यापारिक अनुप्रयोग के लिए इसकी उपयुक्तता क्या है, जिसमें एक पब उप प्रकार मॉडल के माध्यम से बड़ी संख्या में गतिशील अपडेट (यानी 20 सेकंड) की आवश्यकता होती है।

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

एक त्वरित Google से ऐसा लगता है कि व्यवहार जैसे थ्रेड को लागू करने के लिए कई हैक हैं।

मुझे यकीन है कि कई लोगों को भी इसी तरह की समस्या का सामना करना पड़ता है। लोग मुझे पता है कर सकते हैं:

  • कि अच्छी तरह से आदि रखा जाता है वहाँ किसी भी अच्छा सूत्रण libs हैं
  • सिल्वरलाइट जैसे अन्य रिया प्रौद्योगिकियों वही समस्या है।
  • अबोब ने एक थ्रेड मॉडल को क्यों लागू किया?
  • क्या कोई अन्य चाल है जिसका उपयोग मैं यह सुनिश्चित करने के लिए कर सकता हूं कि मेरा यूआई स्थिर है।
+0

आप और अधिक विस्तार से व्याख्या कर सकते हैं आप अपने यूआई में करने के लिए कोशिश कर रहे हैं कि वास्तव में क्या? –

+0

यूआई में मैं डेटा प्रदर्शित करने और समूह करने के लिए कई उन्नत डेटा ग्रिड का उपयोग कर रहा हूं। हर बार एक ऑर्डर अपडेट या सबमिट हो जाता है, इसे यूआई पर धक्का दिया जाता है। 2 सेकंड के समय के भीतर संभावित रूप से 1k ऑर्डर जमा किए जा रहे हैं। मेरे प्रयोगों से यह स्पष्ट हो गया है कि डेटाग्रिड का प्रतिपादन/ताज़ा करना लंबे समय तक ले रहा है। जबकि मैं अपनी आवश्यकताओं में अत्यधिक ताकतवर हूं, मैं यह जानकर बेहद आश्चर्यचकित हूं कि बुनियादी धागे को लागू करने का कोई तरीका नहीं है। – Karl

उत्तर

12

मैंने फ्लेक्स के एकल थ्रेडेड मॉडल में ठीक काम करने वाले बहुत गहन व्यापारी डेस्कटॉप प्रकारों को देखा है। कारण यह है कि आंतरिक रूप से फ्लेक्स ऐप्स एसिंक नेटवर्क IO का उपयोग करते हैं। तो जब आप अनुरोध कर रहे हों तो UI अवरुद्ध नहीं होता है। आप BlazeDS के साथ सीमाओं में भाग ले रहे हैं और शायद कुछ ऐसा मानना ​​चाहिए जो आरटीएमपी (जैसे एलसीडीएस) का उपयोग करता हो। आरटीएमपी ग्राहक को बड़ी मात्रा में डेटा स्ट्रीम करने के लिए एक अधिक कुशल प्रोटोकॉल है। इसके अलावा क्लाइंट-साइड इवेंट हैंडलिंग और प्रतिपादन कोड को अनुकूलित करने के तरीके भी हैं ताकि आप UI को दबाना न पड़े। क्रिस्टोफ़ कोनेराइट्स में इस तरह की चीज करने पर कुछ अच्छे डेमो हैं: http://coenraets.org/blog/?s=trader+desktop

आप जो करने की कोशिश कर रहे हैं वह निश्चित रूप से फ्लेक्स के साथ संभव है और ऐसे लोग हैं जिन्होंने सफलतापूर्वक इसे किया है। https://bugs.adobe.com/jira/browse/ASL-23

+0

यह कुछ हद तक भ्रामक है। जैसा कि मैं इसे समझता हूं, आरटीएमपी एएमएफ की तुलना में डेटा ऑब्जेक्ट्स के पेलोड आकार में और अधिक कुशल नहीं है। जबकि आप डाटा पुश और आलसी लोडिंग आउट-ऑफ-द-बॉक्स प्राप्त करते हैं, तो इसे आसानी से एएमएफ पर ब्लेज़डीएस के साथ हासिल किया जा सकता है। यदि यूआई पब/सब के दौरान लॉक हो रहा है, तो उसे छोटे संदेशों का उपयोग करने की आवश्यकता है। बदलते प्रोटोकॉल उस समस्या को हल नहीं करेंगे। (हालांकि, मुझे एहसास है कि मैं किससे बात कर रहा हूं, इसलिए मैं सही होने के लिए तैयार हूं;) –

+0

आरटीएमपी सिर्फ परिवहन है। यह आंतरिक रूप से एएमएफ का उपयोग करता है ताकि यह एक नोप हो। मेरा मानना ​​है कि आरटीएमपी पैकेट ओवरहेड (संदेश निकाय के ऊपर) वास्तव में HTTP से अधिक है। हालांकि, यह पैकेट आकार के लिए नहीं बल्कि सर्वर कनेक्शन हैंडलिंग और क्लाइंट कनेक्शन सीमाओं के लिए अधिक कुशल नहीं है।अगर आपको अधिक जानकारी चाहिए तो मुझे बताएं। –

1

आप अपने यूआई की स्थिरता के साथ समस्या हो रही है यह बहुत अच्छी तरह से हो सकता है कि आप उचित नहीं बना रहे हैं:

लेकिन वहाँ bugs.adobe.com पर इस के लिए एक खुला सुविधा का अनुरोध है फ्लेक्स में यूआईसीओम्पोनेंट मॉडल का उपयोग। यह एक अमान्यता/सत्यापन मॉडल के आधार पर काम करता है जो यूआई थ्रेड स्क्रीन को पुनर्निर्मित करने के लिए तैयार होने तक अपडेट को स्थगित करने की अनुमति देता है। वहाँ उस पर एक महान प्रस्तुति यहाँ है:

http://tv.adobe.com/#vi+f15384v1002

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

0

यह सुनिश्चित नहीं है कि आपने इसे पहले से देखा है, लेकिन आप पिक्सेलबेंडर का उपयोग प्रभावी ढंग से बहु-थ्रेडेड फ्लैश ऐप प्राप्त करने के लिए कर सकते हैं। Using Pixel Bender to do heavy lifting calculations, makes Flash Player multi-thread देखें।

शुभकामनाएं!

जुआन

+0

इस मामले में मुझे नहीं लगता कि पिक्सेल बेंडर बहुत मदद करेगा क्योंकि यह बड़ी संख्या में फ्लोट पर गणित के संचालन के लिए वास्तव में अच्छा है। -जम्स –

1

मैं बहुत और सीमा यह करने के लिए कुछ इसी तरह कर रहा हूँ, एकल थ्रेड के साथ नहीं है, यह वास्तव में सभी डेटा वापस भेजा जा रहा है और वास्तविक समय में इस अपडेट करने का प्रयास के साथ है। तथ्य यह है कि, आपको वास्तविक समय की आवश्यकता नहीं है, या कम से कम आप "वास्तविक समय" का अर्थ वास्तव में झुका सकते हैं।

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

1

सिल्वरलाइट के बारे में आपके प्रश्न का उत्तर देने के लिए, यह वास्तव में कई पैडों को अनुमति देता है।

0

अबोब ने एक थ्रेड मॉडल को क्यों लागू किया?

एडोब नहीं किया। मैक्रोमीडिया ने किया। सिंगल थ्रेडेड मॉडल वर्चुअल मशीन के बहुत ही कोर पर है। उन्हें थ्रेडेड मॉडल पेश करने के लिए जमीन से एक्शनस्क्रिप्ट वीएम लिखना होगा।

0

यदि आपका यूआई पब/उप संदेशों को भेजने या प्राप्त करने के दौरान लॉक हो रहा है, तो यह संभवतः डेटा के संदेश (डी)/क्रमिकरण के कारण होता है। यह चाल बिना किसी दया के पेलोड आकार को सीमित करना है। क्या आप वास्तव में को अभी भेजे गए सभी ऑब्जेक्ट्स में हर फ़ील्ड की आवश्यकता है?

इसी प्रकार, क्लाइंट -> सर्वर से ऑब्जेक्ट्स भेजने की कोशिश न करें जिसकी आपको आवश्यकता नहीं है। प्रायः पूरे ऑब्जेक्ट की बजाय ऑब्जेक्ट की पहचान करने वाली एक कुंजी भेजने के लिए और अधिक कुशल होता है।

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

एलसीडीएस इस आउट ऑफ़ द बॉक्स को प्रदान करता है, हालांकि, BlazeDS के लिए आप या तो डीपीएचबर्ननेट या गिलाद का उपयोग कर सकते हैं।

(प्रकटीकरण: मैं dpHibernate टीम पर हूँ)

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