AMD (Asynchronous Module Definition) হল একটি JavaScript মডিউল লোডিং স্ট্যান্ডার্ড, যা RequireJS দ্বারা সমর্থিত। AMD এর মাধ্যমে মডিউল ডিফাইন করা এবং ডিপেনডেন্সি ম্যানেজমেন্ট করা যায় অ্যাসিঙ্ক্রোনাসভাবে, যার ফলে ওয়েব অ্যাপ্লিকেশনগুলো দ্রুত লোড হয় এবং তাদের পারফরম্যান্স উন্নত হয়। AMD স্টাইলের মডিউল ডিফাইনিশন আপনাকে নির্ভরশীল মডিউলগুলি একে অপরের উপরে নির্ভরশীলতা উল্লেখ করতে এবং সেগুলোকে অ্যাসিঙ্ক্রোনাসভাবে লোড করার সুবিধা দেয়।
AMD এর মাধ্যমে মডিউল ডিফাইনিং এবং ডিপেনডেন্সি ম্যানেজমেন্ট
1. AMD এর মূল ধারণা:
AMD একটি মডিউল লোডিং স্ট্যান্ডার্ড যা define() এবং require() ফাংশনের মাধ্যমে কাজ করে।
define(): এটি একটি মডিউলকে ডিফাইন করার জন্য ব্যবহৃত হয়, যেখানে আপনি মডিউলটির ডিপেনডেন্সি এবং তার কার্যকারিতা নির্দিষ্ট করতে পারেন।require(): এটি মডিউলগুলিকে লোড করার জন্য ব্যবহৃত হয় এবং ডিপেনডেন্সি ম্যানেজমেন্টের মাধ্যমে মডিউলগুলির একসাথে লোড করার প্রক্রিয়া পরিচালনা করে।
2. define() ফাংশন ব্যবহার করে মডিউল ডিফাইনিং
AMD মডিউল তৈরি করার জন্য define() ফাংশন ব্যবহৃত হয়। এই ফাংশনটি সাধারণত একটি মডিউল এবং তার নির্ভরশীলতাগুলি অ্যাসিঙ্ক্রোনাসভাবে লোড করতে ব্যবহৃত হয়।
define() এর সিনট্যাক্স:
define([dependencies], function() {
// Module code
});
[dependencies]: এটি একটি অ্যারে যা নির্দিষ্ট করে দেয় যে মডিউলটি কোন কোন মডিউলের উপর নির্ভরশীল।function(): এটি একটি কলব্যাক ফাংশন, যা নির্ধারিত মডিউলটির কার্যকারিতা এবং এক্সপোর্ট করা ফাংশন বা অবজেক্ট ধারণ করে।
3. ডিপেনডেন্সি ম্যানেজমেন্ট
AMD এর মাধ্যমে আপনি মডিউলগুলির মধ্যে নির্ভরশীলতা (dependencies) ম্যানেজ করতে পারেন, অর্থাৎ যখন একটি মডিউল অন্য একটি মডিউলের উপর নির্ভরশীল, তখন সেই মডিউলটি আগে লোড হবে।
4. define() এর মাধ্যমে মডিউল ডিফাইনিং উদাহরণ
ধরা যাক, আমাদের দুটি মডিউল রয়েছে: math.js এবং logger.js।
math.js (মডিউল)
// math.js
define([], function() {
return {
add: function(a, b) {
return a + b;
},
subtract: function(a, b) {
return a - b;
}
};
});
এখানে:
math.jsএকটি মডিউল যা দুটি ফাংশন প্রদান করে:addএবংsubtract।- এখানে কোনো নির্ভরশীলতা নেই, তাই
[]অ্যারে খালি রাখা হয়েছে।
logger.js (মডিউল)
// logger.js
define([], function() {
return {
log: function(message) {
console.log(message);
}
};
});
এখানে:
logger.jsএকটি মডিউল যাlogফাংশন সরবরাহ করে, যা কনসোলে একটি মেসেজ লগ করে।
5. require() ফাংশন ব্যবহার করে মডিউল লোডিং
require() ফাংশনটি ব্যবহৃত হয় মডিউলগুলিকে লোড করার জন্য। এটি অ্যাসিঙ্ক্রোনাসভাবে মডিউল লোড করতে সাহায্য করে এবং আপনার প্রয়োজনীয় ডিপেনডেন্সি সরবরাহ করে।
require() এর সিনট্যাক্স:
require([dependencies], function() {
// Callback function to handle loaded modules
});
dependencies: এই অ্যারে-তে মডিউলগুলির নাম দেওয়া হয় যেগুলি আপনি লোড করতে চান।function(): যখন সমস্ত ডিপেনডেন্সি লোড হয়ে যাবে, তখন এই ফাংশনটি কল হবে।
6. require() এর মাধ্যমে মডিউল লোডিং উদাহরণ
// main.js
require(['math', 'logger'], function(math, logger) {
logger.log('Addition: ' + math.add(2, 3)); // Logs: Addition: 5
logger.log('Subtraction: ' + math.subtract(5, 3)); // Logs: Subtraction: 2
});
এখানে:
require()ফাংশনটিmathএবংloggerমডিউলগুলোকে লোড করছে।- যখন এই মডিউলগুলো লোড হয়ে যাবে, তখন callback function এক্সিকিউট হবে এবং মডিউলগুলির ফাংশন ব্যবহার করা যাবে।
7. require.config() দিয়ে কনফিগারেশন এবং পাথ সেট করা
require.config() ব্যবহার করে আপনি মডিউলগুলির পাথ কনফিগার করতে পারেন এবং আরও কিছু অতিরিক্ত কনফিগারেশন সেট করতে পারেন।
require.config() কনফিগারেশন উদাহরণ:
require.config({
baseUrl: 'js', // মডিউলগুলির বেস URL
paths: {
math: 'libs/math', // math.js মডিউলের পাথ
logger: 'libs/logger' // logger.js মডিউলের পাথ
}
});
এখানে:
baseUrl: এটি বেস URL নির্ধারণ করে যেখানে আপনার সব মডিউল রয়েছে।paths: এখানে নির্দিষ্ট মডিউলগুলির পাথ কনফিগার করা হয়েছে।
8. shim ব্যবহার করে ৩য় পার্টি মডিউল লোড করা
যদি আপনি এমন মডিউল ব্যবহার করেন যা AMD সমর্থন করে না, তবে shim কনফিগারেশন ব্যবহার করে তাদের ডিপেনডেন্সি এবং এক্সপোর্ট সেট করা যায়।
require.config({
paths: {
jquery: 'libs/jquery',
underscore: 'libs/underscore'
},
shim: {
underscore: {
deps: ['jquery'],
exports: '_'
}
}
});
এখানে:
shimকনফিগারেশন ব্যবহার করেunderscoreমডিউলের ডিপেনডেন্সিjqueryএবংexportsকরে_নামে এক্সপোজ করা হচ্ছে।
9. Circular Dependency Handling
RequireJS একটি চক্রাকার ডিপেনডেন্সি (circular dependency) সমাধান করার জন্য প্রস্তুত। এটি স্বয়ংক্রিয়ভাবে মডিউলগুলিকে সঠিক অর্ডারে লোড করতে সক্ষম।
// moduleA.js
define(['moduleB'], function(moduleB) {
console.log('Module A');
moduleB.showB();
return {
showA: function() {
console.log('This is Module A');
}
};
});
// moduleB.js
define(['moduleA'], function(moduleA) {
console.log('Module B');
moduleA.showA();
return {
showB: function() {
console.log('This is Module B');
}
};
});
এখানে:
moduleA.jsএবংmoduleB.jsএকে অপরের উপর নির্ভরশীল। RequireJS এই চক্রাকার ডিপেনডেন্সি ম্যানেজ করতে সক্ষম।
সারসংক্ষেপ:
- AMD (Asynchronous Module Definition) একটি মডিউল লোডিং স্ট্যান্ডার্ড, যা মডিউলগুলিকে অ্যাসিঙ্ক্রোনাসভাবে লোড এবং তাদের ডিপেনডেন্সি ম্যানেজ করতে সহায়তা করে।
define()ফাংশন ব্যবহৃত হয় মডিউল ডিফাইন করতে এবং ডিপেনডেন্সি নির্দিষ্ট করতে।require()ফাংশন ব্যবহৃত হয় মডিউলগুলি লোড করতে এবং তাদের কার্যকর করতে।require.config()দিয়ে মডিউলের পাথ এবং অন্যান্য কনফিগারেশন সেট করা যায়।shimকনফিগারেশন ব্যবহার করে ৩য়-পার্টি লাইব্রেরি এবং ডিপেনডেন্সি ম্যানেজ করা যায়।
Read more