জাভাস্ক্রিপ্ট ইভেন্ট লুপ
a year ago
জাভাস্ক্রিপ্টের ইভেন্ট লুপ হল একটি সিস্টেম যা জাভাস্ক্রিপ্টের অসিনক্রোনাস প্রোগ্রামিং এর গোপন রহস্য। জাভাস্ক্রিপ্ট একটি সিঙ্গেল থ্রেড সিস্টেম হলেও এটি কিছু স্মার্ট ডাটা স্ট্রাকচার ব্যবহার করে সমস্ত অপারেশনগুলি একটি থ্রেডে রান করে। একটি অপারেশন শেষ হওয়ার পরে এটি ইভেন্ট কিউতে একটি ইভেন্ট সেট করে এবং এটি কল স্ট্যাকে পুশ করে। কল স্ট্যাক খালি হলে ইভেন্ট লুপ নতুন ফাংশনগুলি ইভেন্ট কিউ থেকে যোগ করে।
ওয়েব অ্যাপ্লিকেশনকে গতিশীল ও ব্যবহারকারীর সাথে Interactive করে তুলতে এর ভূমিকা অপরিহার্য। চলুন ইভেন্ট লুপের গভীরে ডুব দেই এবং এর নানান দিক সম্পর্কে জানার চেষ্টা করি।
এক সুতোয় বাঁধা জীবন:
জাভাস্ক্রিপ্ট কিন্তু এক সুতোয় (single-threaded) চলতে পছন্দ করে। অর্থাৎ, একই সময়ে একটি মাত্র কাজই করতে পারে। কিন্তু প্রশ্ন হল, তাহলে ওয়েব পেজগুলো কীভাবে একই সাথে একাধিক কাজ সামলায়? যেমন, ক্লিক করার সাথে সাথে বাটন বদলে যাওয়া, নেটওয়ার্ক থেকে ডাটা আনা, আবার অ্যানিমেশনও চালানো? এই প্রশ্নের উত্তর হল ইভেন্ট লুপ।
ইভেন্ট লুপের কাহিনী:
- কলের অপেক্ষা: ইভেন্ট লুপ সর্বদা বিভিন্ন ইভেন্টের জন্য অপেক্ষা করে। যেমন, বাটন ক্লিক, পেজ লোড হওয়া, টাইমার শেষ হওয়া, ইত্যাদি।
- কল আসলে: ইভেন্ট লুপ যখন কোন ইভেন্ট পায়, তখন সেটিকে একটি “কল স্ট্যাক” (call stack) নামক জায়গায় রাখে।
- কাজ শুরু: কল স্ট্যাক থেকে ইভেন্টগুলোকে একে একে বের করে তাদের সাথে যুক্ত কোড চালানো হয়।
- দীর্ঘ কাজের সমাধান: যদি কোন কাজ শেষ হতে বেশি সময় লাগে (যেমন, নেটওয়ার্ক থেকে ডাটা আনা), সেক্ষেত্রে ইভেন্ট লুপ সেটিকে “ওয়েব এপিআই” (web API) নামক আরেকটি জায়গায় পাঠিয়ে দেয়।
- অপেক্ষার পালা: ইভেন্ট লুপ আবার নতুন ইভেন্টের জন্য অপেক্ষা করতে থাকে।
- কাজ শেষ: ওয়েব এপিআই যখন দীর্ঘ কাজ শেষ করে, তখন সেটাকে একটি “কলব্যাক” (callback) ফাংশনের মাধ্যমে ইভেন্ট লুপে ফেরত পাঠায়।
- কলব্যাকের ডাক: ইভেন্ট লুপ কলব্যাক ফাংশানটিকে কল স্ট্যাকে রাখে এবং সুযোগ মতো তা চালায়।
এই চলমান প্রক্রিয়ার মাধ্যমে জাভাস্ক্রিপ্ট এক সুতোতেও একাধিক কাজকে সুচারুভাবে পরিচালনা করতে পারে।
উদাহরণ দিয়ে বুঝি:
ধরুন, আপনি একটি বাটনে ক্লিক করলেন। তখন নিচের ঘটনাগুলো ঘটবে:
- ব্রাউজার বাটন ক্লিক ইভেন্টটিকে ইভেন্ট লুপে পাঠাবে।
- ইভেন্ট লুপ সেটিকে কল স্ট্যাকে রাখবে।
- ইভেন্টের সাথে যুক্ত কোড চালানো হবে। যদি সেখানে কোন দীর্ঘ কাজ থাকে (যেমন, নেটওয়ার্ক থেকে ডাটা আনা), সেটিকে ওয়েব এপিআইতে পাঠানো হবে।
- ইভেন্ট লুপ অন্য ইভেন্টের জন্য অপেক্ষা করবে।
- ওয়েব এপিআই দীর্ঘ কাজ শেষ করে কলব্যাক ফাংশানটিকে ইভেন্ট লুপে ফেরত পাঠাবে।
- কলব্যাক ফাংশানটি কল স্ট্যাকে রাখা হবে এবং সুযোগ মতো তা চালানো হবে।
শেষ কথা:
ইভেন্ট লুপ আয়ত্ত করা জাভাস্ক্রিপ্ট ডেভেলপারদের জন্য অত্যন্ত গুরুত্বপূর্ণ। এর মাধ্যমে অ্যাপ্লিকেশনের Efficiency বাড়ানো এবং User Experience ভালো করা সম্ভব হয়। তাই এই রহস্যময় সিস্টেমটিকে ভালোভাবে বোঝার চেষ্টা করুন, আর ওয়েব ডেভেলপমেন্টে বিচরণ করুন নির্ভয়ে!
javascript-event-loop
nodejs-event-loop
event-loop-in-js
event-loop
javascript