Redux मेमोरी की खपत [बंद]


23

Redux ढांचा अपरिवर्तनीय स्थिति / शुद्ध कार्य प्रतिमान का पक्षधर है, जो वर्तमान कार्रवाई के संदर्भ में पिछले राज्य से नए राज्य के निर्माण को बढ़ावा देता है। इस प्रतिमान की प्रयोज्यता अमिट है।

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

क्या किसी ने वास्तव में पारंपरिक फ्लक्स वास्तुकला के लिए एक Redux आवेदन की मेमोरी खपत की तुलना की है? यदि हां, तो क्या वे अपने निष्कर्षों को साझा कर सकते हैं?


4
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह मनमानी मेमोरी प्रोफाइलिंग जानकारी के लिए पूछ रहा है।

क्या आपने इसे प्रोफाइल किया है?

मुझे इसे क्यों प्रोफाइल करना चाहिए? स्पष्ट पुष्टि करने के लिए? क्या यह सामान्य ज्ञान नहीं है कि स्मृति के उपयोग के मामले में एक ही वस्तु को बार-बार एक समान रूप से उछालना एक गंभीर ओवरहेड है? @ दान का जवाब उस ओवरहेड को कम करने का एक तरीका प्रदान करता है और यह अब तक का सबसे अच्छा जवाब है।
000

जवाबों:


30

यह एक वैध चिंता है। जबकि मैंने Redux एप्लिकेशन के मेमोरी उपयोग को नहीं मापा है, मुझे लगता है कि Redux (या उस मामले के लिए कोई अन्य फ्रेमवर्क) का उपयोग करने से पहले आपको तनाव परीक्षणों का निर्माण करना चाहिए जो डेटा मात्रा का अनुकरण करते हैं, आवृत्ति बदलते हैं, और अनुप्रयोग की गणना तीव्रता निर्माण करने जा रहे हैं। तकनीकी निर्णय लेने से पहले इन तनाव परीक्षणों का उपयोग करें कि क्या आपके विशेष मामले में अपरिवर्तनीयता को अपनाना है।

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

आप आंतरिक रूप से संरचनात्मक साझाकरण का उपयोग करके कुशलतापूर्वक सूचियों और मानचित्रों को कार्यान्वित करने वाले Immutable.js जैसे पुस्तकालयों का उपयोग करना भी चाहते हैं। इस तरह, किसी सूची में कुछ वस्तुओं को बदलने से इतनी अधिक नकल शामिल नहीं होती है क्योंकि आंतरिक रूप से अधिकांश मेमोरी को डेटा संरचना के विभिन्न संस्करणों के बीच साझा किया जा रहा है।

लेकिन अंत में, बताने का एकमात्र तरीका तनाव परीक्षणों को लिखना है जो आपके ऐप के इच्छित उपयोग का बारीकी से अनुकरण करते हैं, और अपने लिए दक्षता को मापते हैं।


10
Immutable.js पर कूदने के लिए इतनी जल्दी मत बनो। यह हमारे मामले में एक गंभीर मेमोरी हॉग बनता जा रहा है। Immutable.js आपके (संभवतः) साफ सादे वस्तुओं को ले जाता है और उन्हें मेमोरी-भूखे राक्षसों में इंस्टेंट करता है। इस उदाहरण पर एक नज़र डालें: jsfiddle.net/sn70x2p6 लोड होने के बाद, टैब 61,000KB मेमोरी लेता है। एक लाख सादे ऑब्जेक्ट बनाने के बाद, यह 211,000KB है। पागल। अब "बनाओ अपरिवर्तनीय" पर क्लिक करें और देखें कि क्या होता है। यह 1GB से अधिक मेमोरी उपयोग के लिए कूदता है। आपको अनुभव अलग हो सकता है, लेकिन ज्यादा नहीं।
ओलाव कोकोकोकिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.