RxJS-এ buffer, bufferTime, এবং bufferCount হল তিনটি অপারেটর যা ডেটা স্ট্রিমের মানগুলোকে একটি অ্যারে (array) বা কন্টেইনারে একত্রিত করে রাখে। এই অপারেটরগুলির মাধ্যমে, আপনি স্ট্রিমের ডেটাকে গ্রুপ বা ব্যাচ আকারে ক্যাপচার করতে পারেন, যা একাধিক সাবস্ক্রাইবারের জন্য কার্যকরী হতে পারে। প্রতিটি অপারেটর বিভিন্নভাবে ডেটাকে buffer (ধারণ) করে, এবং তাদের ব্যবহারিক পরিস্থিতি আলাদা।
এই অপারেটরগুলির মাধ্যমে আপনি একটি Observable-এর মানগুলি একটি নির্দিষ্ট সময়ের জন্য বা নির্দিষ্ট সংখ্যা পর্যন্ত একত্রিত করতে পারেন, এবং পরবর্তীতে সেই গ্রুপ বা ব্যাচে ডেটা প্রদান করতে পারেন।
1. buffer()
buffer() অপারেটরটি একটি Observable এর মানগুলোকে একটি অ্যারেতে গ্রুপ করে এবং একটি নির্দিষ্ট trigger Observable-কে সাবস্ক্রাইব করার পর সেই অ্যারে পাঠায়। Trigger Observable সাধারণত অন্য কোন ইভেন্ট বা স্ট্রিম হতে পারে, যেমন একটি click ইভেন্ট বা একটি নির্দিষ্ট সময়কাল।
বৈশিষ্ট্য:
- Trigger Observable: এটি একটি trigger Observable ব্যবহার করে, যা যখনই একটি নির্দিষ্ট মান পায়, তখন buffer হওয়া সমস্ত মান একটি অ্যারেতে প্রেরণ করে।
উদাহরণ:
import { interval } from 'rxjs';
import { buffer } from 'rxjs/operators';
const source = interval(1000); // প্রতি সেকেন্ডে একটি সংখ্যা পাঠাবে
const trigger = interval(3000); // প্রতি ৩ সেকেন্ডে trigger হবে
source.pipe(
buffer(trigger)
).subscribe(val => {
console.log('Buffered values:', val);
});
এখানে, source প্রতি সেকেন্ডে একটি সংখ্যা পাঠাবে, কিন্তু trigger প্রতি ৩ সেকেন্ডে নতুন মান আসবে। ফলে, ৩ সেকেন্ড পর source এর তিনটি মান একটি অ্যারেতে (buffer) গ্রুপ হয়ে সাবস্ক্রাইবারকে পাঠানো হবে।
আউটপুট:
Buffered values: [0, 1, 2]
Buffered values: [3, 4, 5]
Buffered values: [6, 7, 8]
2. bufferTime()
bufferTime() অপারেটরটি একটি Observable থেকে আসা মানগুলোকে একটি নির্দিষ্ট সময়কাল (time window) ধরে একটি অ্যারেতে গ্রুপ করে। এটি সময়ভিত্তিক buffering সম্পাদন করে, যেখানে একবার একটি নির্দিষ্ট সময়সীমা পূর্ণ হলে, তখনো যতগুলো মান পাওয়া গেছে, সেগুলিকে একটি অ্যারেতে পুশ করা হয় এবং নতুন buffer শুরু হয়।
বৈশিষ্ট্য:
- Time Window: আপনি একটি সময়কাল (in milliseconds) নির্ধারণ করতে পারেন, যার মধ্যে ডেটা অ্যারে হিসেবে গ্রুপ হবে।
- Automatic Buffer: নির্দিষ্ট সময় পর নতুন buffer তৈরি হয় এবং পুরনো buffer সাবস্ক্রাইবারকে পাঠানো হয়।
উদাহরণ:
import { interval } from 'rxjs';
import { bufferTime } from 'rxjs/operators';
const source = interval(1000); // প্রতি সেকেন্ডে একটি সংখ্যা পাঠাবে
source.pipe(
bufferTime(3000) // প্রতি ৩ সেকেন্ডে buffer হবে
).subscribe(val => {
console.log('Buffered values:', val);
});
এখানে, bufferTime(3000) মানে প্রতি ৩ সেকেন্ড পর সেগুলির একটি অ্যারে তৈরি হবে এবং সাবস্ক্রাইবারকে পাঠানো হবে।
আউটপুট:
Buffered values: [0, 1, 2]
Buffered values: [3, 4, 5]
Buffered values: [6, 7, 8]
3. bufferCount()
bufferCount() অপারেটরটি একটি Observable থেকে আসা মানগুলোর একটি নির্দিষ্ট সংখ্যা পর্যন্ত গ্রুপ করে এবং সেই গ্রুপকে একটি অ্যারেতে পাঠায়। যখন সেই নির্দিষ্ট সংখ্যা পূর্ণ হবে, তখন একটি অ্যারে সাবস্ক্রাইবারকে পাঠানো হয় এবং একটি নতুন অ্যারে শুরু হয়।
বৈশিষ্ট্য:
- Count: আপনি কতটি মান একত্রিত করতে চান তা নির্ধারণ করেন (যেমন প্রতি ৫টি মানে একত্রিত হবে)।
- Automatic Buffer: যখন নির্দিষ্ট মানের সংখ্যা পূর্ণ হয়, তখন buffer পাঠানো হয় এবং নতুন buffer তৈরি হয়।
উদাহরণ:
import { interval } from 'rxjs';
import { bufferCount } from 'rxjs/operators';
const source = interval(1000); // প্রতি সেকেন্ডে একটি সংখ্যা পাঠাবে
source.pipe(
bufferCount(3) // প্রতি ৩টি মানে buffer হবে
).subscribe(val => {
console.log('Buffered values:', val);
});
এখানে, bufferCount(3) মানে প্রতি ৩টি মানে একটি অ্যারে তৈরি হবে এবং সেটি সাবস্ক্রাইবারকে পাঠানো হবে।
আউটপুট:
Buffered values: [0, 1, 2]
Buffered values: [3, 4, 5]
Buffered values: [6, 7, 8]
সারাংশ
- buffer(): Trigger Observable এর মাধ্যমে ডেটাকে গ্রুপ করে এবং trigger হওয়ার পর সেই মানগুলো একটি অ্যারেতে পাঠায়।
- bufferTime(): নির্দিষ্ট সময় (time window) অনুযায়ী ডেটা গ্রুপ করে এবং সময় পরপর অ্যারে হিসেবে পাঠায়।
- bufferCount(): একটি নির্দিষ্ট সংখ্যা পর্যন্ত ডেটা গ্রুপ করে এবং সেই সংখ্যাটি পূর্ণ হওয়ার পর অ্যারে হিসেবে পাঠায়।
এই তিনটি অপারেটর আপনাকে buffering এবং batching এর জন্য বিভিন্ন পদ্ধতি প্রদান করে, যাতে আপনি RxJS স্ট্রিমগুলোকে আরো কার্যকরীভাবে এবং নির্দিষ্ট শর্তে পরিচালনা করতে পারেন।
Read more