2016-05-01 2 views
15

मैं गर्म और ठंडे अवलोकनों के बीच अंतर को समझता हूं, लेकिन मैं हमेशा लोगों को ठंड के बजाय गर्म अवलोकनों का उपयोग करके देखता हूं; वास्तव में, अगर कोई गलती से ठंडे निरीक्षण का उपयोग करता है तो इसे गलती माना जाता है क्योंकि यह अक्सर अवांछित व्यवहार का कारण होता है।ठंड अवलोकन के लिए उपयोग का मामला क्या है?

एक ऐसा मामला क्या है जहां आप गर्मियों में ठंडा दिखने योग्य या उपयोग करना चाहते हैं?

+0

उद्देश्य यह है कि यह ठंडा है जब यह * उपयोग नहीं किया जाता है *। आप अवलोकन कर सकते हैं, भले ही इसका उपयोग किया जाए या नहीं, लेकिन यह कोई संसाधन नहीं लेगा। – Bergi

+0

@ बर्गि तो क्या फायदा है? आलस्य? – m0meni

उत्तर

5

सबसे पहले, मैं आपको यह सुनिश्चित करने के लिए Hot and Cold observables : are there 'hot' and 'cold' operators? की समीक्षा करने के लिए आमंत्रित करता हूं कि आपको गर्म बनाम ठंड की पूरी तरह से समझ हो।

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

ठंडे अवलोकनों के लिए सबसे आम उपयोग केस आलसी रूप से गर्म अवलोकनों को प्राप्त करना है। यदि आप इसके बारे में सोचते हैं, तो आपको किसी भी तरह इन हॉट अवलोकनों को प्रोग्रामेटिक रूप से बनाने की आवश्यकता है। एक तरीका विषयों का उपयोग करना है (आप तब निर्माता हैं)। दूसरी तरफ उन्हें ऑपरेटरों के माध्यम से अन्य पूर्ववर्ती अवलोकनों से प्राप्त करना है, पूर्ववर्ती अवलोकन जो अन्य लोगों से भी व्युत्पन्न होते हैं .. श्रृंखला के अंत में, आपको Rx.Observable.create मिलना चाहिए और यह एक ठंडा अवलोकन योग्य है।

जब आप आलसी की आवश्यकता होती है तो आप ठंडे देखने योग्य उपयोग करते हैं (केवल उपभोक्ता होने पर मूल्यों का उत्पादन शुरू करते हैं, या उत्पादक प्रक्रिया की शुरुआत को नियंत्रित करते हैं)। उदाहरण के लिए, defer आपको उपभोक्ता होने पर केवल निर्माता शुरू करने की अनुमति देता है। इसका उपयोग तब किया जा सकता है जब आपके पास उदाहरण के लिए एक गर्म अवलोकन हो लेकिन आप अभी तक इसे सुनने के लिए तैयार नहीं हैं।

आपको मूल्य-उत्पादन प्रक्रिया को पुन: उत्पन्न करने की आवश्यकता होने पर भी ठंडे अवलोकन की आवश्यकता होती है (प्रत्येक नया ग्राहक एक ही सटीक प्रक्रिया को पुनरारंभ करेगा)। उदाहरण के लिए यह परीक्षण प्रयोजनों के मामले में है, जहां आप कई बार समान अनुक्रम का उपयोग करना चाहते हैं लेकिन विभिन्न उपभोक्ताओं के साथ और अलग-अलग समय पर।

अंत में, प्रश्न दार्शनिक की तरह लगता है। आपके पास आपके निपटारे में दो टूल्स हैं, जो मायने रखता है, आपको क्या चाहिए, आपके पास क्या है, और आपके उपयोग के मामले में कौन सा काम करता है।

2

एक ऐसा मामला क्या है जहां आप गर्मियों में ठंडा दिखने या ठंडा करने का उपयोग करते हैं?

मुझे आशा है कि मैं स्पष्ट करते हुए कहा नहीं कर रहा हूँ, लेकिन किसी भी स्थिति है जहाँ आप चाहते हैं की एक नमूदार इतिहास से सभी मूल्यों (या कुछ सबसेट पूरा सेट छान कर पर पहुंचे) तक पहुँचने के लिए।

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

+0

आह ठीक है समझ में आता है। क्या आप अपना जवाब थोड़ा सा सामान्य कर सकते हैं? क्या कोई अन्य मामला है? वे सभी आम में क्या साझा करते हैं? आखिरकार, उन चीजों को गर्म धाराएं क्यों नहीं मिल सकतीं? – m0meni

+1

@ ar7 जहां तक ​​मैं इसे समझता हूं, मुझे लगता है कि किसी भी परिदृश्य में एक अवलोकन योग्य पूर्ण इतिहास शामिल है (या इसके कुछ सबसेट पूरे सेट को फ़िल्टर करके पहुंचे हैं) एक ठंडे देखने योग्य कहेंगे। इसके अलावा, [यह] (http://stackoverflow.com/questions/2521277/what-are-the-hot-and-cold-observables#3522506) उत्तर और लिंक किए गए ब्लॉग पोस्ट आलस्य के बारे में आपके प्रश्न पर स्पर्श करते हैं। – pdoherty926

+1

@ ar7 इसके अतिरिक्त, मैंने पाया [एनालॉजी अनुभाग] (https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/creating.md#cold-vs-hot-observables) RxJS के प्रबुद्ध होने के लिए दस्तावेज़। – pdoherty926

4

जवाब के मूल बेन Lesh के संक्षिप्त सारांश में निहित है:

टी एल; डॉ: आप एक गर्म नमूदार जब आप बार बार अपने निर्माता बनाने के लिए नहीं करना चाहती चाहते हैं।

प्रश्न के सीधा जवाब में "क्या मामला है जहां आप पसंद करेंगे या एक गर्म पर ठंडे देखने योग्य का उपयोग करें?", मैं एक सामान्य उत्तर और एक विशिष्ट उदाहरण प्रदान करूंगा।

आम तौर पर, मॉडल धाराओं के लिए एक ठंडा अवलोकन करने के लिए कहीं अधिक सुविधाजनक है जो हर बार बनाए जाते हैं जब उन्हें गर्म बनाने की आवश्यकता होती है और इसे घुमाने की कोशिश की जाती है।

विशेष रूप से, निम्नलिखित छोटे उदाहरण पर विचार करें। मान लें कि आप 10 से नीचे गिनती करके बटन पर एक क्लिक का जवाब देना चाहते हैं। यदि बटन उलटी गिनती के दौरान फिर से क्लिक किया जाता है, तो यह फिर से 10 पर शुरू होता है। यदि बटन ईवेंट पर $ मॉडल क्लिक करें, तो आपके पास ऐसा कुछ हो सकता है:

const subscription = click$ 
    .flatMapLatest(_ => Rx.Observable.interval(1000).take(10)) 
    .select(x => 10 - x) 
    .subscribe(x => console.log('clicked: ' + x)); 

विचार करें कि इसे ठंडे देखने योग्य के बिना कैसे बनाया जाएगा। आप कैसे होंगे:

  1. अग्रिम में एक स्ट्रीम शुरू करें ताकि आवश्यक मूल्यों के दौरान उपयुक्त मूल्य उपलब्ध हों?
  2. अंतराल टिक और आपकी सदस्यता के समय के बीच एक सेकंड के अंश से निपटने से बचें?
  3. उन टर्मिनल के साथ सौदा करें जो केवल 1 के बजाय किसी भी नंबर पर शुरू हो सकते हैं?
  4. स्ट्रीम के लिए तर्क साफ़ करें प्रबंधित करें?

1 और 3 को आसानी से संबोधित किया जा सकता है, लेकिन 2 और 4 खराब हैं।

आपके दूसरे प्रश्न के उत्तर में "क्या यह आलस्य है?" मैं तर्क दूंगा कि यह नहीं है। एक ठंडा देखने योग्य इसे अपने मूल्यों का उत्पादन करने के लिए सदस्यता के क्षण तक छोड़ सकता है। उचित घटनाओं को हुक करने के लिए सब्सक्रिप्शन के पल तक एक गर्म अवलोकन योग्य इसे छोड़ सकता है। वे दोनों अपने तरीके से आलसी हैं (या कम से कम, हो सकता है)। मुख्य अंतर यह है कि बेन लेश ने क्या कहा: क्या आप हर बार एक निर्माता बनाना चाहते हैं? और कभी-कभी, आप वास्तव में करते हैं।

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