RxJS (Reactive Extensions for JavaScript) একটি শক্তিশালী লাইব্রেরি যা Observables এর মাধ্যমে অ্যাসিঙ্ক্রোনাস ডেটা বা ইভেন্ট স্ট্রিম পরিচালনা করে। RxJS-এ, Observables দুটি প্রধান শ্রেণীতে ভাগ করা যায়: Hot Observables এবং Cold Observables। এগুলির মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, যা বুঝতে পারলে আপনি আরো দক্ষতার সাথে RxJS ব্যবহার করতে পারবেন।
Cold Observables
Cold Observables হল এমন Observables যা যখন সাবস্ক্রাইবার যুক্ত হয়, তখন তাদের ডেটা স্ট্রিম শুরু হয়। অর্থাৎ, Cold Observable এর মান শুধুমাত্র সাবস্ক্রাইব করার পরেই উৎপন্ন হয়। প্রতিটি সাবস্ক্রাইবার একটি আলাদা ডেটা স্ট্রিম পায়, এবং সাবস্ক্রিপশন শুরু না করলে কোনো ডেটা প্রেরণ করা হয় না।
Cold Observable এর বৈশিষ্ট্য:
- এটি বিলম্বিত (Lazy): Cold Observable ডেটা উৎপন্ন করার প্রক্রিয়া তখনই শুরু হয় যখন এটি সাবস্ক্রাইব করা হয়।
- প্রতিটি সাবস্ক্রাইবারকে নতুন ডেটা প্রদান করে: যখন একটি Cold Observable সাবস্ক্রাইবার যুক্ত হয়, তখন সে তার নিজস্ব ডেটা স্ট্রিম পায়, এবং অন্য সাবস্ক্রাইবারের কাছে আগের ডেটা পুনরায় পাঠানো হয় না।
- নতুন ডেটা উৎপন্ন হয়: প্রতিটি সাবস্ক্রাইবারের জন্য ডেটা একটি নতুন উৎস থেকে উৎপন্ন হয়, যা একে বিলম্বিত বা lazy করে তোলে।
উদাহরণ:
import { Observable } from 'rxjs';
const coldObservable = new Observable(subscriber => {
console.log('Observable execution started');
subscriber.next('Hello');
subscriber.complete();
});
coldObservable.subscribe(val => console.log(val)); // "Observable execution started" তারপর "Hello"
coldObservable.subscribe(val => console.log(val)); // "Observable execution started" তারপর "Hello"
এই উদাহরণে, প্রতিটি সাবস্ক্রাইবারের জন্য Observable থেকে নতুন ডেটা উৎপন্ন হয়।
Hot Observables
Hot Observables হল এমন Observables যা সাবস্ক্রাইবারের সাথে যুক্ত না হলেও ডেটা পাঠানো শুরু করে। অর্থাৎ, Hot Observable ডেটা উৎপন্ন করা শুরু করে এবং এটি একাধিক সাবস্ক্রাইবারের সাথে শেয়ার করা যায়। একবার ডেটা উৎপন্ন হতে শুরু করলে, সমস্ত সাবস্ক্রাইবার সেই একই ডেটা স্ট্রিম পাবেন, এবং এটি eager (অথবা আগ্রহী) ডেটা স্ট্রিম হিসেবে পরিচিত।
Hot Observable এর বৈশিষ্ট্য:
- এটি আগ্রহী (Eager): Hot Observable ডেটা উৎপন্ন শুরু করে সাবস্ক্রিপশন না করলেও। অর্থাৎ, এটি ডেটা উৎপন্ন করতে আগ্রহী।
- একাধিক সাবস্ক্রাইবার শেয়ার করে: Hot Observable এর মাধ্যমে পাঠানো ডেটা একাধিক সাবস্ক্রাইবারের মধ্যে শেয়ার হয়, এবং একে পুনরায় প্রেরণ করা হয় না।
- ডেটার উৎপত্তি একাধিক সাবস্ক্রাইবারের জন্য একই: Hot Observable থেকে একাধিক সাবস্ক্রাইবার একই ডেটা স্ট্রিম গ্রহণ করে, যা sharing এর মাধ্যমে কাজ করে।
উদাহরণ:
import { Subject } from 'rxjs';
const hotObservable = new Subject();
hotObservable.next('Hello');
hotObservable.subscribe(val => console.log(val)); // "Hello"
hotObservable.next('World');
hotObservable.subscribe(val => console.log(val)); // "World"
এখানে Subject হল একটি Hot Observable, যেখানে সাবস্ক্রাইবারের সাথে যুক্ত না হলেও ডেটা পাঠানো শুরু হয়।
Hot এবং Cold Observables এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Cold Observable | Hot Observable |
|---|---|---|
| ডেটা উৎপাদন | সাবস্ক্রিপশন শুরু হলে উৎপন্ন হয় | সাবস্ক্রিপশন শুরুর আগেই উৎপন্ন হয় |
| প্রতিটি সাবস্ক্রাইবার | নতুন ডেটা পায় | একই ডেটা শেয়ার করে |
| এটি কি 'Lazy' বা 'Eager' | Lazy (ডেটা যখন প্রয়োজন তখন উৎপন্ন হয়) | Eager (ডেটা উৎপন্ন হতে থাকে, সাবস্ক্রিপশন যতক্ষণ না করা হয়) |
| সাবস্ক্রাইবারদের প্রভাব | একে অন্যের সাথে প্রভাবিত হয় না | একাধিক সাবস্ক্রাইবার একসাথে একই ডেটা শেয়ার করে |
| ব্যবহার | HTTP রিকোয়েস্ট, ফাইল রিডিং এর মতো পরিস্থিতি | ইউজার ইভেন্ট, টাইমার, লাইভ ডেটা ফিড |
সারাংশ
Cold Observables এবং Hot Observables উভয়ই RxJS এর গুরুত্বপূর্ণ উপাদান, কিন্তু তাদের মধ্যে প্রধান পার্থক্য হল ডেটা উৎপন্ন হওয়ার প্রক্রিয়া এবং সাবস্ক্রাইবারদের প্রতি প্রতিক্রিয়া। Cold Observables শুধুমাত্র সাবস্ক্রাইব করার পরই ডেটা উৎপন্ন করে এবং প্রতিটি সাবস্ক্রাইবারকে আলাদা ডেটা প্রদান করে, যেখানে Hot Observables সাবস্ক্রিপশন শুরুর আগেই ডেটা পাঠাতে শুরু করে এবং একাধিক সাবস্ক্রাইবার একই ডেটা শেয়ার করে। এই দুটি ধরনের Observable এর মধ্যে পার্থক্য বুঝতে পারলে আপনি আরো কার্যকরভাবে RxJS ব্যবহার করতে পারবেন।
Read more