22

मैं आयनिक और कोणीयजेएस (कोणीयजेएस-सामग्री) का उपयोग कर एक संकर ऐप का निर्माण कर रहा हूं। इस ऐप में नोड.जेएस और सॉकेट.ओओ के साथ निर्मित एक एकीकृत चैट भी है।कोणीयजेएस: विभिन्न ऊंचाइयों के साथ पंक्ति के साथ आभासी दोहराना

मुझे अब समस्या है कि केवल 200 संदेशों के साथ ऐप सभी संदेशों को लोड करने में बहुत धीमा हो जाता है (ब्राउज़र में 200ms -> ऐप में 4sec, क्रॉसवॉक के साथ भी, और message.id द्वारा ट्रैक के साथ) और टाइपिंग संदेश डालने के लिए textarea धीमा कर दिया गया है।

  1. वर्चुअल दोहराएँ (एमडी आभासी-दोहराने)
  2. अनंत स्क्रॉल (आयन अनंत-पुस्तक)

1) मुझे लगता है कि:

मैं इस को हल करने दो समाधान है आभासी दोहराना सबसे अच्छा समाधान होगा (मैंने इसे पहले से ही किसी अन्य पृष्ठ पर लागू कर दिया है और यह 1500 आइटमों को एक आकर्षण की तरह स्क्रॉल करता है) लेकिन समस्या यह है कि संदेश में उनके लंबाई और एमडी वर्चुअल-दोहराने की आवश्यकता के आधार पर अलग-अलग ऊंचाई हो सकती है तत्वों के लिए वही ऊंचाई होना चाहिए w ork।

2) तो शायद हम अनंत स्क्रॉल विधि पर जा सकते हैं लेकिन समस्या यह है कि इसे आयन-अनंत-स्क्रॉल निर्देश के साथ करना थोड़ा मुश्किल हो जाता है क्योंकि चैट को लोड करने की आवश्यकता होती है अधिक() शीर्ष पर पहुंचने पर और नीचे नहीं।

तो मेरे सवाल है: है किसी को भी एक चिकनी/तेजी से एक चैट के अंदर का उपयोग कर एनजी-दोहराने या एक आभासी-दोहराने के निर्देश है कि अलग-अलग ऊंचाइयों या एक अनंत स्क्रॉल कि पर काम करता है संभाल कर सकते हैं के लिए एक समाधान है शीर्ष?

+0

क्या आपको कोई समाधान मिला है? – InsFi

उत्तर

1

क्या आपने समाधान के रूप में React.js पर एक नज़र डाली है? यह वर्चुअल डॉम का उपयोग करता है जो लंबी सूचियों को और अधिक कुशल अद्यतन करता है।

गिटहब पर एक ओपन-सोर्स रेपो है जो एंगुलर और रिएक्ट को मिश्रित करता है, जिसे एनजीआरएक्ट कहा जाता है।

अवलोकन: http://ngreact.github.io/ngReact/

डॉक्स: http://ngreact.github.io/ngReact/docs/ngReact.html

रेपो: https://github.com/ngReact/ngReact

आशा इस मदद करता है।

+0

मैं व्यक्तिगत रूप से प्रतिक्रिया नहीं जानता और इसका कभी भी उपयोग नहीं किया। यदि यह सबसे अच्छा समाधान होने का खुलासा करेगा तो आपको यह जानने के लिए कितना समय लगता है? मैं एक फ्रीलांसर हूं और मुझे जीवित रहने के लिए समय के विरुद्ध दौड़ने की आवश्यकता है –

+0

यह इस बात पर निर्भर करता है कि आप कोणीय के साथ कितने आरामदायक हैं। यदि आपको कोणीय का अच्छा ज्ञान है, तो इसे उठाकर बहुत मुश्किल नहीं होना चाहिए। – Matt

1

रिवेट्स की तरह अलग बाइंडरों का उपयोग करते हुए एक अच्छा समाधान हो सकता है, अपनी आसान एकीकृत करने के लिए और उसके होने RV-प्रत्येक पाश

+0

क्या आप कृपया विस्तृत कर सकते हैं (शायद एक लिंक के साथ)? –

+0

कृपया इसे [लिंक] (http://rivetsjs.com/) देखें, यह हल्का और तुलनात्मक तेज़ बांधने वाला है, यह आपके लिए मदद कर सकता है, इसका समर्थन सादा जावास्क्रिप्ट दो तरह बाध्यकारी है, इसका उपयोग कैसे करें [link] (http : //justbuildsomething.com/agnostic-data-binding-with-rivets-js/) –

1

लिए मुझे लगता है कि आयनिक निर्देश collection-repeat हो सकता है आप के लिए क्या देख रहे हैं।

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

+0

"यदि आइटम-ऊंचाई और आइटम-चौड़ाई विशेषताओं की आपूर्ति नहीं की जाती है, तो यह माना जाएगा कि सूची में मौजूद प्रत्येक आइटम में समान आयाम हैं पहली वस्तु के रूप में।"- मेरे मामले में थोड़ा समस्याग्रस्त ओ क्या आपको लगता है कि इसे –

+0

तय किया जा सकता है मैंने अभी कोशिश की है, लेकिन अगर पहला संदेश छोटा है और मैंने एक बड़ा टेक्स्ट डाला है तो संदेश बबल कम हो जाता है और दूसरा संदेश अगर पहला संदेश –

+0

@ स्मिले एप्लीकेशन शायद यह काम करता है अगर आप संदेश-वस्तु में 'आइटम-टेक्स्ट-रैप' वर्ग जोड़ते हैं। – nicfo

2

चीजों की जोड़ी आप इसे तेज करने की कोशिश कर सकते हैं।

एक त्वरित-एनजी-दोहराने की तरह कुछ का उपयोग करने के होगा: https://github.com/allaud/quick-ng-repeat बजाय कोणीय जे एस एनजी-दोहराने में बनाया

एक और one time binding उपयोग करने के लिए जहां कभी संभव लगातार हर दौरान परिवर्तन की तलाश में से कोणीय को रोकने के लिए किया जाएगा पाचन चक्र: https://docs.angularjs.org/guide/expression#one-time-binding

और निश्चित रूप से, यदि यह संभव है, तो यह पता लगाने के लिए कि कौन से फ़ंक्शन एप्लिकेशन को धीमा कर रहे हैं, क्रोम के डेवलपर टूल प्रोफ़ाइल विकल्प का उपयोग करने का प्रयास करें;)

पुनश्च: Implementing a reverse infinite scroll using ngInfiniteScroll directive in AngularJS

2

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

आप क्या कर सकते हैं एक लूप में इंजेक्शन से पहले प्रत्येक तत्व की ऊंचाई की गणना करने के लिए कारखाने का उपयोग करें। यह एक ही कंटेनर को लक्षित कंटेनर (उदा। सीएसएस कक्षाओं) के रूप में एक ही कंटेनर बनाकर किया जा सकता है, जो नए लोड किए गए तत्वों को जोड़ता है, उनकी ऊंचाई की गणना करता है (element.offsetHeight का उपयोग करके), और कंटेनर को बाद में हटा देता है।

ध्यान रखें कि यह काफी भारी है और संभवतः एक छोटी सी अंतराल का कारण बन जाएगा। पर कोणीय-बनाम-दोहरानेangular-vs-repeat

डेमो

+0

हाँ मैंने इसके बारे में भी सोचा लेकिन, क्योंकि मेरे पास कोई धीमा नहीं है 'पृष्ठ पर समस्याएं (चूंकि मैंने आईडी द्वारा ट्रैक का उपयोग किया है) लेकिन केवल पहली बार संदेशों को प्रस्तुत करने में बहुत समय लगता है, क्या आपको लगता है कि यह विधि वास्तव में एक सुधार होगी? –

+0

यदि आप एक समय में <30 आइटम (संदेश) जैसे लोड करते हैं और आपकी सूची स्थिर हो रही है तो यह निश्चित रूप से 'ng-repeat' पर एक सुधार है! – Iso

+0

@ क्या आपने इस दृष्टिकोण को पहले लागू किया है या आपने किसी के बारे में पढ़ा है कि उन्होंने यह कैसे किया है? –

0

देखो: demo

मैं मदों की गणना ऊंचाई के लिए लाइन की लंबाई का उपयोग करें।

यह बहुत अनुमानित विधि है। हमारे ऐप में हम जानते हैं कि फ़ॉन्ट आकार 15 पीएक्स वाले एक अंग्रेजी चरित्र की चौड़ाई लगभग 6.7 पीएक्स होगी (यह ठीक है, अगर आप मोनोस्पेस फ़ॉन्ट का उपयोग करते हैं, लेकिन यह हमारा मामला नहीं है)। साथ ही हम हमेशा एक सेगमेंट लाइन की प्रत्येक सेगमेंट और ऊंचाई की चौड़ाई जानते हैं। itemHeight = commulativeTextLenght/lineWidth + paddingsOfItem; लाइन ब्रेक स्टाइल भी आपकी गणना को प्रभावित कर सकता है। आम तौर पर हमारे पास लगभग 8000 टेक्स्ट पैराग्राफ की ऊंचाई की गणना करने के लिए कोई खराब विधि नहीं थी।

+1

कृपया पढ़ें [अनुभाग का जवाब कैसे दें] (http://stackoverflow.com/help/how-to-answer), विशेष रूप से यह अनुभाग: ** लिंक के लिए संदर्भ प्रदान करें **। अर्थात। उदाहरण के लिए: बताएं कि लिंक क्या करते हैं, और यदि आपके पास डेमो है, तो अपने उत्तर में कोड शामिल करें। – AgataB

+0

लाइन लंबाई के आधार पर आप तत्व ऊंचाई की गणना कैसे कर रहे हैं? क्या आप अपने समाधान का एक उदाहरण प्रदान कर सकते हैं? –

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