Node JS

নোড জেএস কি? এটা সম্পর্কে আমরা সবাই জানি এবং এটা অনেক পাওয়ারফুল, পপুলার। কিন্তু নোড আসলে কি? আমি আজকে আমার এই লেখায় এটা নিয়েই আলোচনা করবো।

জাভাস্ক্রিপ্ট মেইনলি আমরা ওয়েবে ইউজ করি। অর্থাৎ জাভাস্ক্রিপ্ট শুধুমাত্র ওয়েব ব্রাউজারে রান করে। ব্রাউজার বিভিন্ন ইঞ্জিন ব্যবহার করে জাভাস্ক্রিপ্ট রান করানো জন্য। যেমন গুগুল ক্রোম গুগুল ভি-এইট ইঞ্জিন ইউস করে, ফায়ারফক্স স্পাইডার-মানকি/রিহনো ইউজ করে, ইন্টারনেট এক্সপ্লোরার ও এজ চাকরা ইঞ্জিন ইউজ করে এবং সাফারি জাভাস্ক্রিপ্ট-কোর/নিট্রো ইউজ করে (জাভাস্ক্রিপ্ট এর অনেক ইঞ্জিন আছে, ফুল রেফারেন্স পেতে এখানে দেখুন )। অর্থাৎ জাভাস্ক্রিপ্ট শুধুমাত্র ব্রাউজারের মধ্যেই সীমাবদ্ধ ছিলো। বলা চলে নোড জেএস আসার আগ পর্যন্ত অনেকটা ব্রাউজারের ভিতরেই শুধুমাত্র জাভাস্ক্রিপ্ট এর ক্ষমতা ছিলো।

কিন্তু নোড আসার পর এমন একটা এনভায়ারোমেন্ট আসলো যেখানে আমরা জাভাস্ক্রিপ্ট কে ব্রাউজার থেকে বের করে আনতে পেরেছি। এখন নোড জেএস দিয়ে আমরা জাভাস্ক্রিপ্ট এর পাওয়ার বাইরেও প্রয়োগ করতে পারছি। আগে যেখানে শুধুমাত্র একটা ওয়েবসাইটের লোগো চ্যাঞ্জ করা, ইভেন্ট অ্যাড করা, ওয়েব পেজে ইন্ট্যারেক্টিভ কিছু অ্যাড করা ইত্যাদি ইত্যাদিই জাভাস্ক্রিপ্ট কাজ ছিলো সেখানে এখন নোড দিয়ে সিস্টেম প্রোগ্রামিং ও করা সম্ভব হচ্ছে। ওয়েব সার্ভার বানানো থেকে শুরু করে ক্রস প্ল্যাটফর্ম অ্যাপ্লিকেশন বানানো সম্ভব হচ্ছে।

নোড জেএস কি সেটা জানার জন্য নোড জেএস এর অফিসিয়াল ওয়েবসাইটের প্রথম কয়েকটা লাইন দেখলেই বুঝা যায়ঃ

নোড জেএস এর সংজ্ঞা – অফিশিয়াল ওয়েবসাইটে থেকে

আমি এখানে সবগুলা লাইন বাই লাইন ব্যাখ্যা করবো সবার ক্লিয়ার হওয়ার জন্যঃ

আমরা জানি গুগুল ক্রোম গুগুলের ভিএইট ইঞ্জিন ইউস করে জাভাস্ক্রিপ্ট রান করার জন্য। নোড জেএস ও সেইম ইঞ্জিন ইউস করে জাভাস্ক্রিপ্ট কোড রান করে। ক্রোমের ভি এইট ইঞ্জিনের কাজ হলো জাভাস্ক্রিপ্ট কে ম্যাশিন কোডে কনভার্ট করা। আর আমাদের কম্পিউটার একমাত্র ম্যাশিন কোড ছাড়া সরাসরি কোনো কোড বুঝতে পারে না। গুগুলের ভি এইট ইঞ্জিন এই প্রসেস অনেক ফাস্ট করতে পারে যেটা নোড জেএস ফাস্ট কাজ করার অন্যতম কারণ। আর এছাড়াও এখানে নোড জেএস এর কিছু স্পেশালিটি আছে যা অন্যান্য সবকিছু তো বটেই অন্যান্য প্রোগ্রামী ল্যাংগুয়েজ থেকেও জাভাস্ক্রিপ্ট কে অন্যরকম স্থানে নিয়ে গেছে।

IO অপারেশন, যেটা আমরা প্রতিনিয়ত সবজায়গায়তেই করি। ডাটাবেস থেকে ডাটা রিড করা, গুগুল ম্যাপ থেকে থেকে কোনো ম্যাপের ইনফো গ্র্যাব করা বা যেকোনোধরনের রিড বা রাইট অপারেশন সবই IO অপারেশনের মধ্যে পড়ে। আর আইও অপারেশন করতে স্বাভাবিকভাবেই অন্যান্য নরমাল অপারেশন যেমন লজিকাল বা যোগ বিয়োগ থেকে একটু বেশী সময় লাগে। IO অপারেশনে প্রোগ্রামকে দেখা যায় আপনার হার্ড ডিস্ক অ্যাক্সেস করতে হচ্ছে বা রিমোট কোনো সার্ভার অ্যাক্সেস করে ডাটা আনতে হচ্ছে। স্বাভাবিকভাবেই এটা একটু টাইম নিবে।Non-blocking IO হচ্ছে এমন একটা সিস্টেম যেখানে প্রোগ্রাম কোনো পার্টিকুলার IO অপারেশনের জন্য অপেক্ষা করে না। বরং সেই IO অপারেশনকে ট্রিগার করে তার কাজ চালিয়ে যাওয়ার জন্য নির্দেশ দিয়েই পরের লাইনে বা পরে কোডে চলে যায়। এক্ষেত্রে একটা IO অপারেশনের কোনো কাজ করতে একটু সময় লাগলেও সে সময়টা নষ্ট না করে, বসে না থেকে পরের কোডগুলা এক্সিকিউট করে ফেলে।

ব্লকিং আর নন ব্লকিং অপারেশনের মধ্যে পার্থক্য

এখানে দেখা যাচ্ছে একই কাজ ব্লকিং অপারেশনে যে সময় লাগতেছে, নন-ব্লকিং এ এর চেয়ে অনেক কম সময়ে সে কাজ করা যাচ্ছে। ব্লকিং অপারেশনে ম্যাশিনকে অলস বসে থাকতে হচ্ছে যেখানে নন-ব্লকিং জাস্ট বিহ্যাইন্ড দ্যা সিনে আইও অপারেশন ট্রিগার করেই বাকি কাজ করে ফেলছে। এতে আপনার অ্যাপ্লিকেশনের পার্ফর্মেন্স কতটুকু বাড়তে পারে এবার নিজেই অনুমান করুন।

সব প্রোগ্রামিং ল্যাংগুয়েজ সাধারণত একই সময়ে একটা একটা করে কোড এক্সিকিউট করে। একটা কোড এক্সিকিউট করার সময় সাধারনত প্রোগ্রাম আরেকটা কোড এক্সিকিউট করতে পারে না। এক্সিকিউশন স্ট্যাক নামে একটা টার্ম আছে, যেখান থেকে প্রোগ্রামের একেকটা ইন্সট্রাকশন সাধারণত একটা একটা করে তুলে নেওয়া হয়। একটা ইটের স্ট্যাক থেকে কোনো একটা ইট সরিয়ে আনতে চাইলে যেমন একদম উপরের টাকে টাচ না করে বাকিগুলা নিতে পারবেন না, তেমনি এক্সিকিউশন স্ট্যাকেও একটা ইন্সট্রাকশন এক্সিকিউট না হওয়া পর্যন্ত আরেকটা টাচ করা যায় না। কোনো একটা IO অপারেশন কোনো বিশেষ কাজের জন্য ২ সেকেন্ড সময় নিলে, সেটা ২ সেকেন্ডই অলস বসে থাকে কাজ শেষ হওয়ার জন্য। কাজ শেষ হলে পরেই পরের লাইনে যায়। কিন্তু নোড এখানেই স্পেশাল জাভাস্ক্রিপ্ট ইউস করার জন্যে। নোড অ্যাপ্লিকেশন এই নন ব্লকিং সিস্টেমে আইও অপারেশনগুলোকে একটা স্পেশাল স্টেজে রেখে বাকি কাজ করে ফেলে, অন্যান্য প্রোগ্রাম থেকে অ্যাপ্লিকেশন ফাস্ট এক্সিকিউট করতে পারে। এতে সময় বাচে এবং বেস্ট পার্ফর্মেন্স পাওয়া যায়।

এই কাজটা অনেক বড় বড় লেভেলের প্রোগ্রামিং ল্যাংগুয়েজ দিয়েও করা যায় না, কারণ তারা আইও ব্লকিং ল্যাংগুয়েজ। বিশেষ টেকনিক ইউস করে করা গেলেও রুট যেহেতু আইও ব্লকিং তাই জাভাস্ক্রিপ্ট এর মতো এতোটা কাজের হয় না। মাল্টিথ্রেড নামে একটা কন্সেপ্ট আছে অন্যান্য ল্যাংগুয়েজ গুলোতে। এটার আইডিয়াটা হলো অনেকটা কয়েকটা কাজ একসাথে করার মতো। বাট এর জন্য মাল্টিপল থ্রেড ইউস করতে হয়, মানে এক্সট্রা মেমোরি ইউজ হচ্ছে, এক্সট্রা রিসোর্ট লাগতেছে। কিন্তু নোড সিঙ্গেল থ্রেডেড। একটা দিয়েই Non-blocking সিস্টেমে একই সাথে দ্রুত প্রোগ্রাম এক্সিকিউট করে ফেলতে পারে।

এখানে একটা প্রব্লেম হতে পারে। যেমন আপনি ডাটা রিকোয়েস্ট করে পরে সে ডাটা ইউস করেই বাকি লাইন গুলো লিখলেন। তাইলে যদি আপনার নোড ডাটা আসার আগেই পরের লাইনগুলো এক্সিকিউট করতে যায় তাইলে ডাটা পাবে না, মানে এরর আসবে। সেটাও হ্যান্ডল করার জন্য জাভাস্ক্রিপ্ট এ আরেকটা কন্সেপ্ট রয়েছে প্রমিস নামে। প্রমিস নিয়ে আমি আরেকদিন আলোচনা করবো।

আর সবার শেষে NPM এর কথা বলা হয়েছে। মনে করেন আপনি অনেক ছোটো ছোটো কাজ প্রতিনিয়ত করেন, একটা কাজই দেখা যাচ্ছে বারবার করতে হচ্ছে। কিন্তু এমন যদি হয় একাজগুলা অলরেডি রেডিমেট পাওয়া যায় এবং সেগুলা লাখ লাখ ডেভেলপারদের দ্বারা স্বীকৃত এবং ফ্রীও তাহলে কেমন হয়? হ্যা NPM মানে Node Package Manager। এখানে এরকম হাজার হাজার রেডিমেট প্যাকেজ আছে যেগুলা একদম ওপেন সোর্স যা ইউস করে আপনি আপনার অ্যাপ্লিকেশন বানিয়ে ফেলতে পারবেন। NPM এর প্যাকেজ ইউস করা অনেক হ্যান্ডি, তবে এটা নিয়ে পরে কপ্লিট লিখবো।

আর এভাবেই নোড জেএস এতো পাওয়ারফুল এবং পপুলার ডেভেলপার কমিউনিটিতে 😉

সবাই ভালো থাকবেন। হ্যাপী প্রোগ্রামিং!

আমার নতুন ব্লগ পোস্ট গুলোর আপডেট পেতে আপনি আপনার ইমেইল দিয়ে আমার ব্লগ পোস্টগুলো সাবস্ক্রাইব করে রাখতে পারেন, নতুন পোস্টগুলো সপ্তাহে একদিন আপনার ইনবক্সে চলে যাবে

Comments

comments