ডেনো কি?
ডেনো হচ্ছে জাভাস্ক্রিপ্ট ও টাইপস্ক্রিপ্টের একটি সিকিউর রানটাইম, এটি জাভাস্ক্রীপ্টের 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 এবং এছাড়া আরও অনেক রয়েছে।

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