হ্যালো বন্ধুরা স্বাগত জানাচ্ছি নতুন একটি টিউটোরিয়াল এ। আজকে চেষ্টা করবো Node.Js এর উপর একটা স্পষ্ট ধারনা দেওয়ার জন্য। তারপর ধারবাহিক ভাবে Node.js এর উপর টিউটোরিয়াল আসতে থাকবে এবং সেই টিউটোরিয়াল গুলো ফলো করে আমরা ভালভাবে শিখবো Node.Js। আশা করবো এই পুরো টা সময়ে আমার পাশে আপনাদেরকে সাথে পাবো। তাহলে শুরু করা যাক আজকের বিষয়ে নিয়ে আলোচনা।
যারা নতুন তাদের মধ্যে অনেকেই ভাবে নোড জেএস হয়তো কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ বা ফ্রেমওয়ার্ক! কিন্তু এটা সম্পূর্ণ ভুল। নোড জেএস কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ বা ফ্রেমওয়ার্ক নয়। তাহলে নোড জেএস কি?
নোড জেএস হচ্ছে একটি জাভাস্ক্রিপ্ট Run-Time Environment। আচ্ছা বুঝলাম কিন্তু এই Run-Time Environment টা আবার কি?
Run-Time Environment এর কাজ হচ্ছে নির্দিষ্ট একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ এর কোড গুলোকে রান করা।
আপনাদের মধ্যা কেও যদি জাভা জেনে থাকেন তাহলে run-time environment সম্পর্কে ভালভাবে জানার কথা। ![1
উপরের ছবিটির দিকে একটু লক্ষ্য করুন, দেখুন কিছু বুঝতে পারছেন কিনা! যদি কিছু বুঝে থাকেন তাহলে আপনি Genius! আর না বুঝে থাকলেও কোন সমস্যা নেই! আস্তে আস্তে বুঝে যাবেন আর সাথে তো আমি আছিই।
জাভা সাধারণত চলে জাভা ভার্চুয়াল মেশিন (JVM) এর মাধ্যমে। আর সেই জাভা কোড গুলো execute করার জন্য প্রয়োজন হয় Java Runtime Environment,
অর্থাৎ Java Runtime Environment খুব ভালভাবেই জানে যে কিভাবে জাভা কোড গুলোকে নিয়ে সঠিক ভাবে রান করাবে এবং কাজ করাবে। জাভা নিয়ে বেশি কথা বলতে চাই না কারন আমরা এখন নোড জেএস শিখছি জাভা নয়। জাভা নিয়ে একটু বললাম কারন যদি আপনি জাভার এই Concept টা বুঝে থাকেন, তাহলে খুব সহজেই নোড জেএস কিভাবে কাজ করে সেটাও বুঝতে পারবেন। আমি মনে করি কোন জিনিশ শেখার আগে কিভাবে সেটা কাজ করে ভালোভাবে বোঝা উচিত, তাহলেই সামনে গিয়ে আটকাতে হবে না।
আমরা জানি জে জাভাস্ক্রিপ্ট তৈরী করা হয়েছিলো শুধুমাত্র ব্রাউজার এর জন্য। আগে শুধুমাত্র ওয়েবসাইট Interective করার জন্য ব্যবহার করা হতো জাভাস্ক্রিপ্ট।
একমাত্র ব্রাউজারই বুঝতে পারতো জাভাস্ক্রিপ্ট কোড। কিন্তু ২০০৯ সালে Ryan Dahl নামে একজন সফটওয়্যার ইঞ্জিনিয়ার বাজারে নিয়ে আসে নোড জেএস আর পাল্টে দেয় সবকিছু!
নোড জেএস আসার পর এখন জাভাস্ক্রিপ্ট দিয়ে অনেক কিছু করা যায়!
প্রত্যেকটা ব্রাউজার এর মধ্যে একটি করে জাভাস্ক্রিপ্ট ইঞ্জিন থাকে যার কাজ হচ্ছে জাভাস্ক্রিপ্ট কোড কে মেশিন কোডে রূপান্তর করা।
Google Chrome এর আছে V8 Engine আর Mozilla Firefox এর আছে SpiderMonkey এবং প্রত্যেকটি ব্রাউজার এর জন্য রয়েছে আলাদা আলাদা জাভাস্ক্রিপ্ট ইঞ্জিন।
সব থেকে ফাস্ট হচ্ছে V8 Engine এবং এটি ওপেন সোর্স।
Ryan Dahl এর মাথায় চমৎকার একটি আইডিয়া আসলো! তিনি V8 engine কে সাথে নিয়ে C এবং C+ এর মিশ্রণে তৈরী করে ফেললেন নোড জেএস।
জাভা কোড রান করার জন্য যেমন Java Runtime Environment লাগে তেমন ব্রাউজার এর বাইরে থেকে জাভাস্ক্রিপ্ট কোড রান করার জন্য লাগে নোড জেএস। এবার বুঝতে পারছেন তো Runtime Environment কি? আচ্ছা আরো একটু ক্লিয়ার করে দেই। যদি আমরা নোড জেএস এর মধ্যে জাভাস্ক্রিপ্ট কোড লিখি, নোড জেএস সেই জাভাস্ক্রিপ্ট কোড কে রূপান্তর করে C+ কোডে, আর সেই C+ কোড থেকে রূপান্তর হয় মেশিন কোডে। অবশেষে সেই মেশিন কোড আমাদের মেশিন বুঝতে পারে এবং আমাদের আউটপুট দেয়।
এই এত কিছু ঘটে যায় আমাদের চোখের পলকে, আমরা কিছুই বুঝতে পারি না।
আর জাভার ক্ষেত্রে যা হয় তা হচ্ছে, জাভা কোড কে Java Runtime Environment (JRE) রান করে এবং জাভা ভার্চুয়াল মেশিনকে (JVM) বুঝতে সাহায্য করে সেই কোড আর জাভা ভার্চুয়াল মেশিন সেই কোডকে রূপান্তর করে মেশিন কোডে, আর মেশিন কোড তো আমাদের মেশিন বুঝতেই পারে!
ঠিক এভাবেই ব্রাউজার গুলোও জাভাস্ক্রিপ্ট কোড কে Javascript Engine এর মাধ্যমে C+ করে মেশিন কোডে রূপান্তর করে।
এবার মিল খুঁজে পাচ্ছেন তো নোড জেএস এবং Java Runtime Environment এর মধ্যে? এবার নিশ্চয়ই এই Concept টা আপনার কাছে ক্লিয়ার?
যদি এখনো ক্লিয়ার না হয়ে থাকে, আস্তে আস্তে নোড জেএস এর সাথে থাকতে থাকতে সব পরিষ্কার হয়ে যাবে!
নোড জেএস ব্যবহার করে event-driven, non-blocking I/O model যা নোড জেএস কে পরিণত করে লাইটওয়েট এবং খুবই শক্তিশালী!
আগে আপনাকে বোঝা উচিত যে এই non-blocking I/O দিয়ে আসলে কি বোঝায়?
I/O এর ফুল ফর্ম হচ্ছে Input/Output.
প্রোগ্রামিং এর মধ্যে ২ টি ডিজাইন প্যাটার্ন রয়েছে। একটি হচ্ছে Asynchronous প্রোগ্রামিং এবং আরেকটি হচ্ছে Synchronous প্রোগ্রামিং।
এখানে Asynchronous প্রোগ্রামিং হচ্ছে Non Blocking I/O এবং Synchronous প্রোগ্রামিং হচ্ছে Blocking I/O.
নোড জেএস by default Asynchronous বা Non Blocking I/O প্যাটার্ন ফলো করে চলে। আর পিএইচপি Blocking I/O প্যাটার্ন ফলো করে চলে।
চলুন Asynchronous বা Non Blocking এবং Synchronous বা Blocking I/O নিয়ে একটি রিয়েল Example দেখা যাক। নিচের কোড টি ফলো করুন।
// Say "Hello."
console.log("Hello.");
// Say "Goodbye" two seconds from now.
setTimeout(function() {console.log("Goodbye!");}, 2000);
// Say "Hello again!"
console.log("Hello again!");
উপরের কোড টি রান করলে Asynchronous প্যাটার্ন এ একরকম আউটপুট দিবে আর Synchronous প্যাটার্ন এ আরেকরকম আউটপুট দিবে।
প্রথমে দেখা যাক Synchronous প্যাটার্ন কিভাবে কাজ করে! উপরের কোড অনুযায়ী Synchronous প্যাটার্ন যা আউটপুট দিতো তা হলঃ
তার মানে কি বুঝতে পারলেন? এখানে Sequence ভাবে আউটপুট দিচ্ছে। একটি নির্দিষ্ট কাজ শেষ না হওয়া পর্যন্ত আরেকটি কাজ করতে পারে না Synchronous প্যাটার্ন। প্রথম কাজ সম্পন্ন না হওয়া পর্যন্ত দ্বিতীয় কাজটি করতে অক্ষম Synchronous প্যাটার্ন এ।
আমাদের দেশের শিক্ষাবোর্ড সাইট গুলো সাধারণত Blocking I/O হয়ে থাকে।
এজন্যই দেখে থাকবেন যে আমাদের দেশে যখন পরীক্ষার রেজাল্ট পাবলিশ করা হয় তখন অনেক মানুষ একসাথে রেজাল্ট দেখার চেষ্টা করে, ফলে এত ইউজারদের আউটপুট দিতে পারে না একসাথে! একজন কে আউটপুট দেওয়ার সময় বাকিদের ব্লক করে রাখে। যেহেতু লাখ লাখ মানুষ একসাথে চেষ্টা করে তাই রেজাল্ট পেতে অনেক সময় লাগে।
এখন দেখা যাক Asynchronous প্যাটার্ন কিভাবে আউটপুট দিতো এই কোড কে।
এখানে কিন্তু Sequence ভাবে আউটপুট দিচ্ছে না। যখন যেটার কাজ শেষ হচ্ছে সেটা আউটপুট দিচ্ছে। অর্থাৎ, এমন না যে একটি কাজ সম্পন্ন না হওয়া পর্যন্ত আরেকটি কাজ করতে পারছে না।
আরো সহজ ভাষায় বলতে গেলে মনে করুন ৩ জন কাস্টমার করিম চাচার দোকানে গিয়ে একে একে ৩ কাপ চা এর অর্ডার করলো।
এখানে আবার করিম চাচা কিন্তু অন্য সব চা দোকানদের মত না! তার কাছে রয়েছে একটি বিশেষ ক্ষমতা! করিম চাচার বিশেষত্ব হচ্ছে তিনি Asynchronous.
করিম চাচা ৩ কাপ চা ভিন্ন ভিন্ন ভাবে বানাচ্ছেন।
ভিন্ন ভিন্ন চা এর মাঝে তৃতীয় কাস্টমার এর চা সবার আগে তৈরী হয়ে গেলো যেহেতু সে রঙ চা খাবে এবং বানাতেও কম সময় লেগেছে। করিম চাচা সেই রঙ চা তৈরী হওয়া মাত্রই তৃতীয় কাস্টমারকে দিয়ে দিলো এবং সেই কাস্টমার চা পাওয়া মাত্রই খেতে শুরু করলো।
যদিও তৃতীয় কাস্টমার সবার শেষে এসেছে এবং পেয়েও গেছে সবার আগে।
বাকিদের চা এখনো তৈরী হয়নি তাই তারা অপেক্ষা করছে।
এবার তৈরী হয়ে গেলো দ্বিতীয় কাস্টমার এর চা এবং চাও পেয়ে গেলো সে।
সবার শেষে চা পেলো প্রথম কাস্টমার কারন তার চা বানাতে বেশি সময় লেগেছে। এখানে লক্ষ্য করুন, করিম চাচার কাছে আগে আসলেই আগে চা পাওয়া যায়না। কারন সে হচ্ছে non Blocking I/O
যেহেতু নোড জেএস Asynchronous প্যাটার্ন ফলো করে তাই এটা অনেক ফাস্ট এবং একসাথে অনেক অনেক কাজ করতে পারে একই সময়ে।
এছাড়াও নোড জেএস এর রয়েছে NPM, যার মধ্যে রয়েছে 700, 000 Modules. এই Modules গুলো আপনার প্রজেক্টে খুব সহজেই ব্যবহার করতে পারবেন।
আরো অনেক অনেক কারন রয়েছে নোড জেএস শেখার।
আসলে নোড জেএস শেখার কারন বলে শেষ করা যাবে না। তাই এখনই শেখা শুরু করে দিন নোড জেএস!
আর খুব শীঘ্রই নোড জেএস এর উপর ফুল টিউটোরিয়াল সিরিজ প্রকাশিত হতে যাচ্ছে।
আজকের মত এখানেই বিদায় নিচ্ছি ধন্যবাদ এবং Happy coding! <>
আমি এস এম সোহাগ। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 6 বছর 3 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 3 টি টিউন ও 2 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 6 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমার নাম Sm Shohag। একজন Full Stack Developer হিসেবে অনলাইন মার্কেটপ্লেস গুলো তে কাজ করি পাশাপাশি চেষ্টা করি নিজের সামান্য জ্ঞান টুকু অন্যদের মাঝে ছড়িয়ে দিতে, সেই প্রচেষ্টা থেকেই পার্সোনাল একটি ব্লগ সাইট করেছি যেখানে আপনারা Modern ওয়েব ডেভেলপমেন্ট শিখতে পারবেন! আমার সাইট এর লিঙ্ক https://www.fsmdeveloper.com/ আর যদি আপনাদের কোন...
Next Part Please