मैं जीडब्ल्यूटी परियोजना पर काम कर रहा हूं जहां हम कुछ डेटा प्रदर्शित करने के लिए FlexTable का उपयोग कर रहे हैं। मुझे पता है कि हमें शायद CellTable का उपयोग करना चाहिए क्योंकि इसमें बेहतर प्रदर्शन है, लेकिन फ्लेक्सटेबल शैली (शैली विशिष्ट कोशिकाओं) के लिए आसान है और विशिष्ट सेल को अपडेट करना आसान बनाता है।जीडब्ल्यूटी फ्लेक्सटेबल प्रदर्शन और अनुकूलन
तालिका के लिए अपडेट प्राप्त करने के लिए हम WebSockets का उपयोग कर रहे हैं। वेबस्केट्स के माध्यम से प्रति सेकंड 100 से अधिक अपडेट होने पर हम जिस समस्या का सामना कर रहे हैं, वह अब उच्च CPU लोड है। वेबसॉकेट कनेक्शन से प्रत्येक संदेश में तालिका में कई सेल्स के लिए अद्यतन होते हैं। तो अभ्यास में प्रति सेकंड 100 से अधिक अपडेट हैं जिन्हें फ्लेक्सटेबल में प्रस्तुत किया जाना चाहिए। 4 जीबी रैम के साथ मेरे 3GHz i5 पर सीपीयू लोड लगभग 50% है। यदि मैं डेटा के वास्तविक प्रतिपादन को अक्षम करता हूं (setText() विधि कॉल पर टिप्पणी करें) तो CPU लोड 5-10% तक चला जाता है। तो मुझे पता है कि डीओएम अपडेट बाधाएं हैं, कोड के अन्य हिस्सों में नहीं।
यह CellTable (लेकिन कैसे तो झुलसाना सेल अपडेट करने के लिए)
- उपयोग ग्रिड बजाय
- स्विच करने के लिए बेहतर होगा?
- उपयोग जे एस/JSNI FlexTable setText() के बजाय डोम के साथ काम करने
वहाँ तालिका को लागू करने और प्रदर्शन में सुधार करने के लिए बेहतर तरीके हैं?
मैंने Google को फ्लेक्सटेबल के साथ समान समस्याएं होने पर Google को करने का प्रयास किया है, लेकिन केवल सामान्य राय है कि यह धीमा है, कुछ विशिष्ट नहीं है। हम आवेदन प्रोटोटाइप जावास्क्रिप्ट में और प्रति सेकंड सीपीयू लोड एक ही 100 अद्यतन के साथ विशुद्ध रूप से किया है लगभग 15% है
अद्यतन
गिराने सीएसएस फीका प्रभाव है जो हम से सेल मूल्य कम सीपीयू लोड में परिवर्तन का संकेत करने के लिए इस्तेमाल ~ 10 %। तो ऐसा लगता है कि डोम एकमात्र समस्या नहीं है।
सेल का वास्तविक अपडेट शेड्यूलर Impl.get() के अंदर किया जाता है। शेड्यूल डिफरर्ड() लेकिन इससे ज्यादा मदद नहीं मिलती है। हालांकि यह ब्राउज़र को अधिक उत्तरदायी रखता है। SchedulerImpl.get() का उपयोग करना। ScheduleIncremental() काम नहीं करेगा क्योंकि हमारे द्वारा प्राप्त डेटा की मात्रा भिन्न हो सकती है। अब तक ऐसा लगता है कि हमें ग्रिड को आज़माकर खुद को लागू करना चाहिए। – dimchez
वृद्धि, इस मामले में स्थगित से कहीं ज्यादा बेहतर है। डिफरर्ड प्रति ऑपरेशन के लिए एक नया जेएस टाइमर का उपयोग करेगा, जबकि वृद्धिशील एकल जेएस निष्पादन स्टैक में एकाधिक अपडेट बैच करेगा, जिसके परिणामस्वरूप एक पृष्ठ रीड्रॉ होगा, जिससे प्रतिपादन थ्रेड बैच में संचालन भी कर सकता है। – Ajax