ডেনো এবং নোড জেএসের মধ্যে এখন পর্যন্ত কোনটির জনপ্রিয়তা বেশি?

deno vs nodejs

ডেনো কি?

ডেনো হচ্ছে জাভাস্ক্রিপ্ট ও টাইপস্ক্রিপ্টের একটি সিকিউর রানটাইম, এটি জাভাস্ক্রীপ্টের V8 ইঞ্জিন এবং Rust ল্যাঙ্গুয়েজ ব্যবহার করে তৈরি করা হয়েছে।

নোড জেএস এর অরিজিনাল ক্রিয়েটর – রায়ান ডল (Ryan Dahl) এই রানটাইমটির ক্রিয়েটর, এই প্রজেক্টির মূল উদ্দেশ্যে হচ্ছে নোড জেএসের ডিজাইন প্রবলেমগুলো ফিক্স করা। বিশেষ করে, সিকিউরিটি প্রবলেম। ডেনোকে নোডের একটি আপগ্রেড এবং সুরক্ষিত ভার্সন এই জন্যে বলা যেতে পারে।

রায়ান ডল ২০১৮ সালে একটি কনফারেন্সের মাধ্যমে নোডের বিভিন্ন বাগ (ত্রুটি) সম্পর্কে একটি প্রেজেন্টেশন দেন। এবং ঐ দিন তিনি নোড জেএস এর আপগ্রেড ভার্সন ডেনোকে সবার সামনে প্রকাশ করেন।

ডেনোর বিশেষ কিছু ফিচারসমূহ

  • সিকিউরিটি
    • ডেনো বাই ডিফল্ট স্যান্ডবক্সে (Sandbox) কোড এক্সিকিউট করে, তাই পারমিশন ছাড়া ফাইল সিস্টেম, নেটওয়ার্ক এবং এনভাইরনমেন্ট (Environment) এক্সেস করা সম্ভব হয় না। ফাইল এক্সেস করতে হলে কিছু ফ্ল্যাগ (Flag) এর প্রয়োজন হয়। যেমনঃ – allow-net, allow-write.
  • ইকমাস্ক্রিপ্ট মডিউল (ES Module)
    • ডেনো মডার্ণ জাভাস্ক্রীপ্ট- ইএস মডিউল ব্যবহার করে এবং মডার্ণ সিন্টেক্স import package from 'package' ব্যবহার করে। আর নোডের ক্ষেত্রে আমরা const package = require("package") এই সিন্টেক্স ব্যবহার করে থাকি। 
  • ডেনোতে ফাইল import করা হয় ফলে আমদের যতটুকু অংশ প্রয়োজন ঠিক ততটুকু অংশ আমরা প্যাকেজ থেকে লোড করতে পারি, যা আমাদের মেমরি সেভ করে রাখে। (require) মডিউলগুলো সিঙ্ক্রনাসলি (Synchronus) লোড করে এবং import মডিউলগুলো এসিঙ্ক্রনাসলি (Asynchronus) লোড করে, এতে অ্যাপ্লিকেশনের পারফরমেন্স অনেকাংশ বেড়ে যায়।
  • ডিসেন্ট্রালাইজড প্যাকেজ
    • ডেনো ব্যবহার করলে NPM এর উপর নির্ভরশীলতা কমে যায়। এতে package.json এর কোনো প্রয়োজন নেই এবং প্রতিটি প্যাকেজ একটি URL থেকে লোড করা যায়।
  • ডেনোর আরেকটি সুবিধা হচ্ছে, ডেনো প্রতিটি প্যাকেজ ইনস্টলেশনের পর হার্ড ড্রাইভে ডেটা ক্যাশ করে রাখে। ডেনোতে প্যাকেজ ইনস্টলেশন একবারই হয়। এর অর্থ হচ্ছে একবার ক্যাশ করা হয়ে থাকলে, ডেনো সেগুলি পুনরায় ডাউনলোড করে না, যতক্ষণ না আমরা রিলোড ফ্ল্যাগ (Flag) ব্যবহার করে রিকুয়েস্ট করি।
  • ব্রাউজার কমপিটিবিলিটি
    • ডেনোতে ইএস মডিউলগুলো ব্যবহার করার কারণে, আমাদের অ্যাপ্লিকেশনটিকে ব্রাউজারে ব্যবহার উপযোগী করার জন্য ওয়েব প্যাকের (Webpack) মতো কোনো বিল্ড টুলস ব্যবহার করার প্রয়োজন হয় না।
  • টাইপস্ক্রীপ্ট সাপোর্ট
    • টাইপস্ক্রীপ্টের ব্যবহার খুব সহজ করে তুলেছে ডেনো। যারফলে কোনো রকম ফাইল কনফিগারেশন ছাড়াই টাইপস্ক্রিপ্ট ব্যবহার করা যায়। যদি আমরা প্লেইন জাভাস্ক্রীপ্টে প্রোগ্রাম লিখতে চাই ডেনো দিয়ে কোনও সমস্যা ছাড়াই তা করা সম্ভব।
  • ব্রাউজার API- এ অ্যাক্সেস (Window, Fetch)
    • ডেনোর নেটিভলি window অবজেক্টে অ্যাক্সেস রয়েছে, যার অর্থ আমরা কোনো লাইব্রেরি ইনস্টল না করে fetch("https://domain.com") একসেস করা যায় এবং এর পাশাপাশি ব্রাউজার এপিআই-তে অন্য যে কোনো ফাংশন কল করা যায়।

তাছাড়া,  কিছু বিল্ট-ইন উইটিলিটি রয়েছে যেমন- ডিপেনডেন্সি ইনসপেক্টর (ডেনো ইনফো) এবং কোড ফরম্যাটার (ডেনো এফএমটি)। ডেনো শুধুমাত্র সিংগেল এক্সিকিউটেবল ফাইল শিপ করে।

নোড জেএস এবং ডেনোর মধ্যে সাধারণ কিছু পার্থক্য

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

  • নোড জেএস CommonJS ব্যবহার করে। নোড জেএসে একটি প্যাকেজ ব্যবহার করতে হলে আমাদের প্রথমে NPM থেকে এটি ইনস্টল করতে হবে:
npm i moment
  • ইনস্টল হওয়ার জন্য অপেক্ষা করতে হবে, তারপরে এটি অ্যাপে ইনক্লুড করতে হবে:
const moment = require("moment")
  • এছাড়াও, যদি আমরা কোনো সময় নোড জেএস রেপো রান করতে চাই, তখন আমাদের NPM থেকে সমস্ত ডিপেন্ডেন্সি ইনস্টল করতে হবে।
  • অন্যদিকে, ডেনো ডিফল্ট মডিউল সিস্টেম হিসাবে ES Module ব্যবহার করে এবং ডেনো require() সাপোর্ট করে না। ডেনোতে node module ফোল্ডার ও NPM এর মতো কোনো প্যাকেজ ম্যানেজারের প্রয়োজন হয় না। ডেনো সকল থার্ডপার্টি মডিউলগুলো URLs এর মাধ্যমে ইমপোর্ট করে।
  •   নোড জেএসের আমরা এভাবে ইনপুট করি,
const moment = require("moment")
  •   ডেনো জেএসে এভাবে ইনপুট করতে হয়,
import {moment} from "https://deno.land/x/moment/moment.ts"
  • এখানে ডিপেন্ডেন্সি লিস্ট ও প্যাকেজ.জেসন (package.json) ফাইল এর প্রয়োজন হয় না। কারণ ডেনো সকল মডিউলগুলো ডাউনলোড করে, কম্পাইল এবং ক্যাশ করে রাখে।
  • ডেনো স্যান্ডবক্সে কোড এক্সিকিউট করে, তাই পারমিশন ছাড়া ফাইল সিস্টেম, নেটওয়ার্ক এবং এনভাইরনমেন্টে এক্সেস করা সম্ভব হয় না। ফাইল এক্সেস করতে হলে কিছু ফ্ল্যাগ এর প্রয়োজন হয়। যেমনঃ – allow-net, allow-write. অন্যদিকে নোড জেএস ফাইল ফুল এক্সেস দেয়।
  • ডেনো টাইপস্ক্রিপ্ট সাপোর্টেড। অর্থাৎ, টাইপস্ক্রিপ্ট কোড লেখার জন্য ম্যানুয়ালি টুল ইনস্টল এবং কনফিগার করার প্রয়োজন হয় না। শুধুমাত্র আমাদের ফাইলটি .js এর পরিবর্তে .ts লিখে সেভ করতে হয়। কিন্তু নোড জেএসে টাইপস্ক্রিপ্ট ব্যবহার করা মানে হচ্ছে একটি মাল্টি স্টেপ প্রসেস। টাইপক্রিপ্ট ইনস্টল করতে হয়, package.json tsconfig.json আপডেট করতে হয় এবং মডিউলগুলি @types সাপোর্টেড কিনা তা নিশ্চিত করতে হয়।  ‌
  • নোডে, await কীওয়ার্ডটি শুধুমাত্র একটি অ্যাসিঙ্ক্রোনাস ফাংশন দ্বারা অ্যাক্সেস করা যায়। কিন্তু ডেনোতে এ্যাসিঙ্ক ফাংশন ছাড়াই await কীওয়ার্ডটি ব্যবহার করা যায়।
  • নোড জেএসে আমরা যেভাবে লিখি,
const fakeData = async () => {const data = await fetch("https://domain.com/todos/1");const result = await data.json();};moment} from "https://deno.land/x/moment/moment.ts"
  • ডেনো জেএসে যেভাবে লিখতে হয়,
const data = await fetch("https://domain.com/todos/1");const result = await data.json();
  • জাভাস্ক্রিপ্টে HTTP রিকুয়েস্ট করতে, আমরা Fetch API ব্যবহার করতে পারি। নোডজেএসে, আমাদের ব্রাউজার এপিআইতে অ্যাক্সেস নেই তাই আমরা নেটিভলি ফেচ ফাংশনটি কল করতে পারি না। আমাদের প্রথমে প্যাকেজটি ইনস্টল করতে হবে:
npm i node-fetch

তারপর প্যাকেজটি ইমপোর্ট করতে হবে:

const fetch = require("node-fetch")

এবং তারপর আমরা ফেচ ফাংশনটি কল করতে পারব।

  • ডেনোর স্থানীয়ভাবে window অবজেক্টে অ্যাক্সেস রয়েছে, যার অর্থ আমরা কোনো লাইব্রেরি ইনস্টল না করে fetch("https://domain.com") কল করতে পারি পাশাপাশি ব্রাউজার এপিআই-তে অন্য যে কোনও ফাংশন কল করতে পারি।  
  • নোড জেএসে যেভাবে ইনপুট করি,
const fetch = require("node=fetch")const fakeData = async ()=> {const data = await fetch("https://domain.com/todos/1");const result = await data.json();};
  • ডেনো জেএসে যেভাবে ইনপুট করতে হয়,
const data = await fetch("https://domain.com/todos/1");const result = await data.json();

এখন সবচেয়ে বড় প্রশ্নঃ ডেনোর জনপ্রিয়তা কতটুকু এবং এটি কি নোড জেএস এর স্থান দখল করবে?

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

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

এই পর্যন্ত নোড জেএস ব্যবহার করে অসংখ্য প্রজেক্ট, ওয়েবসাইট ও প্যাকেজ ডেভেলপ করা হয়েছে। নোড জেএস হিউজ পরিমাণ কোম্পানি দ্বারা ব্যবহৃত হচ্ছে। এর মধ্যে কয়েকটি কোম্পানি হচ্ছে- Groupon, Netflix, LinkedIn, IBM, Voxer, SAP, Paypal, Walmart এবং এছাড়া আরও অনেক রয়েছে।

Stackoveflow Developer Survey 2020
স্ট্যাকওভারফ্লো ডেভেলপার ২০২০ সার্ভে থেকে নেওয়া

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

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

এখন যারা নতুন ডেভেলপার আছেন তাদের মনে প্রশ্ন আসতে পারে যে আপনি কোনটি দিয়ে শুরু করবেন বা কোনটি শিখবেন?

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

তাছাড়া, আপনি যদি নোড জেএস স্কীপ করেন তবে আপনি নোড জেএস, এনপিএম এবং এর পুরো ইকোসিস্টেমের বিশ্বটি মিস করবেন। আর আপনি যদি নোড জেএসের ডাউনসাইড না জেনে থাকেন তবে আপনি ডেনোর সুবিধাগুলো কীভাবে উপভোগ করবেন?

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না।

You May Also Like
Bangla C programming Resource Projuktir Avijatri c programming tutorial c resources bangla c for beginner বাংলায় সি প্রোগ্রামিং রিসোর্স সি প্রোগ্রামিং ল্যাঙ্গুয়েজ সি প্রোগ্রামিং টিউটোরিয়াল বাংলা বই সি প্রোগ্রামিং ব্লগ সি প্রোগ্রামিং অনলাইন টিউটোরিয়াল
আরও পড়ুন

সি প্রোগ্রামিং শুরু করার রিসোর্স

সি প্রোগ্রামিং টুকিটাকিসংগ্রহ করা বাংলা রিসোর্স; তো এখান থেকেই সি শেখা শুরু করা যাক! যখন আমাদের হাতে কিছু সময় থাকে,…
Web Design VS Web Development ওয়েব ডিজাইন এবং ওয়েব ডেভেলপমেন্ট
আরও পড়ুন

ওয়েব ডেভেলপমেন্ট: একের ভিতর সব

আমার মনে পড়ছে সেই দিনগুলোর কথা যখন আমি ওয়েব ডেভেলপমেন্ট শেখা শুরু করেছিলাম। আমি তখন ডিজাইন আর ডেভেলপমেন্টের…
Web-Development-career-roadmap Projuktir Avijatri ওয়েব ডেভেলাপমেন্ট ক্যারিয়ার যেভাবে শুরু করতে হবে প্রযুক্তির অভিযাত্রি Front End Back End Developer ক্যারিয়ার Career
আরও পড়ুন

ওয়েব ডেভেলপমেন্টে ক্যারিয়ার গড়তে যা শিখতে হবে

নতুন সব টেকনোজির পাশাপাশি প্রতিদিন অসংখ্য ওয়েবসাইট ইন্টারনেটে যুক্ত হচ্ছে, যার ফলে ওয়েব ডেভেলপারদের চাহিদা ক্রমশ বাড়ছে। ওয়েব…
Top Six CMS Intro
আরও পড়ুন

৬ টি জনপ্রিয় ও সেরা ওপেন সোর্স সিএমএস সফটওয়্যার

আপনারা হয়তো জেনে থাকবেন, সিএমএস এর পূর্ণরুপ হচ্ছে কন্টেন্ট ম্যানেজমেন্ট সিস্টেম (CMS = Content Management System)। টেকনিক্যাল সংজ্ঞা…
জাভা বনাম কটলিন : কোনটি সেরা?
আরও পড়ুন

জাভা বনাম কটলিন : কোনটি সেরা?

বর্তমান সময়ে আমরা যেসব স্মার্টফোন ব্যবহার করি তার অধিকাংশই এন্ড্রয়েড অপারেটিং সিস্টেম দ্বারা পরিচালিত। কিন্তু আমরা যদি মোবাইল…
Projuktir Avijatri Rust Programming language
আরও পড়ুন

Rust নতুন প্রজন্মের প্রোগ্রামিং ল্যাংগুয়েজ

Rust এর জন্ম ২০০৯ সালে মজিলার একটি রিসার্চ প্রজেক্ট হিসেবে। ২০০৯ এ তারা চিন্তা করছিল কিভাবে একটি উন্নত…