ExpressJS-এ Cache Control এবং Static File Optimization ব্যবহারের মাধ্যমে আপনার অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করা সম্ভব। স্ট্যাটিক ফাইল যেমন CSS, JavaScript, এবং ইমেজ ফাইলের জন্য সঠিক ক্যাশ কন্ট্রোল সেট করা এবং সেগুলির অপটিমাইজেশন করা ওয়েব অ্যাপ্লিকেশনকে আরও দ্রুত এবং কার্যকরী করে তোলে।
১. Cache Control
Cache Control হলো একটি HTTP হেডার, যা ওয়েব ব্রাউজার এবং অন্যান্য মিডিয়া প্রোক্সি সার্ভারের জন্য নির্দেশনা প্রদান করে, কোন রিসোর্স কিভাবে ক্যাশ (সংরক্ষণ) করতে হবে। ExpressJS-এ আপনি Cache-Control হেডারটি ব্যবহার করে স্ট্যাটিক ফাইলের ক্যাশিং নিয়ন্ত্রণ করতে পারেন। এটি ব্রাউজারকে জানায় যে, কবে এবং কতদিন একটি রিসোর্স ক্যাশ করা যেতে পারে।
Cache Control কিভাবে কাজ করে?
- public: ফাইলটি সকল ব্যবহারকারীর জন্য ক্যাশ করা যেতে পারে।
- private: ফাইলটি শুধুমাত্র একক ব্যবহারকারীর জন্য ক্যাশ হবে।
- max-age: নির্দিষ্ট সময়কাল (সেকেন্ডে) পর্যন্ত ফাইলটি ক্যাশ হবে।
- no-cache: ফাইলটি ক্যাশ করা যাবে না, প্রতি রিকোয়েস্টে নতুনভাবে লোড হবে।
২. ExpressJS-এ Cache Control সেট করা
ExpressJS-এ express.static মিডলওয়্যার ব্যবহার করে স্ট্যাটিক ফাইলের জন্য ক্যাশ কন্ট্রোল হেডার সেট করা যায়।
উদাহরণ: Static ফাইলের জন্য Cache Control সেট করা
const express = require('express');
const app = express();
const port = 3000;
// স্ট্যাটিক ফাইলের জন্য Cache Control সেট করা
app.use(express.static('public', {
maxAge: '1d', // ফাইলগুলো ১ দিন ধরে ক্যাশ হবে
setHeaders: (res, path) => {
res.set('Cache-Control', 'public, max-age=86400'); // ১ দিন (২৪ ঘণ্টা)
}
}));
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
এখানে:
maxAge: '1d': এই সেটিংটি ১ দিনের জন্য ক্যাশিং নির্ধারণ করে।setHeaders: ফাইলের জন্য ক্যাশ কন্ট্রোল হেডার কাস্টমাইজ করার জন্য ব্যবহার করা হয়। আপনি এখানে ক্যাশ কন্ট্রোল হেডারটি নির্দিষ্ট করতে পারেন।
৩. স্ট্যাটিক ফাইলের জন্য ক্যাশ কন্ট্রোলের গুরুত্বপূর্ণ নির্দেশনা
max-age: ফাইলটি কতক্ষণ ক্যাশ করা হবে তা নির্ধারণ করে। উদাহরণস্বরূপ,max-age=3600মানে ফাইলটি ১ ঘণ্টা (৩৬০০ সেকেন্ড) পর্যন্ত ক্যাশ হবে।immutable: এই ডিরেক্টিভটি ব্যবহার করা হলে, ফাইলটি একবার ক্যাশ হলে তার পর আর পরিবর্তিত হবে না বলে ধরে নেওয়া হয়।no-store: কোনো রিসোর্স ক্যাশ করা যাবে না।no-cache: ফাইলটি ক্যাশ করা যাবে, কিন্তু প্রতিবার ব্যবহার করার আগে সার্ভারের সাথে যাচাই করতে হবে।
উদাহরণ: Immutable Cache Control
app.use(express.static('public', {
maxAge: '1y', // ১ বছর ধরে ক্যাশ হবে
setHeaders: (res, path) => {
res.set('Cache-Control', 'public, max-age=31536000, immutable'); // ১ বছর (৩১৫৩৬০০০ সেকেন্ড)
}
}));
এখানে immutable এর মাধ্যমে স্ট্যাটিক ফাইলটি একবার ক্যাশ হলে আর কখনো পরিবর্তিত হবে না বলে ধরে নেওয়া হয়েছে।
৪. Static File Optimization
স্ট্যাটিক ফাইলগুলো যেমন CSS, JavaScript এবং ইমেজ ফাইলের সাইজ কমিয়ে অ্যাপ্লিকেশনের পারফরম্যান্স বাড়ানো সম্ভব। নীচে স্ট্যাটিক ফাইল অপটিমাইজ করার জন্য কিছু কৌশল দেওয়া হলো:
১. Minification (মিনিফিকেশন)
মিনিফিকেশন হলো ফাইলের অব্যবহৃত অংশগুলো অপসারণ করে ফাইলের আকার ছোট করা। CSS, JavaScript এবং HTML ফাইলগুলোকে মিনিফাই করা যায়। এর ফলে ব্রাউজার এই ফাইলগুলো দ্রুত লোড করতে পারে।
- CSS মিনিফিকেশন:
cssnanoঅথবাclean-cssপ্যাকেজ ব্যবহার করা যায়। - JavaScript মিনিফিকেশন:
UglifyJSঅথবাTerserপ্যাকেজ ব্যবহার করা যায়।
২. Image Optimization (ইমেজ অপটিমাইজেশন)
ইমেজ ফাইলের সাইজ কমানোর জন্য বিভিন্ন টুল বা লাইব্রেরি ব্যবহার করা যেতে পারে, যেমন:
- ImageMagick: ইমেজ ফাইল কম্প্রেশন ও রিসাইজের জন্য।
- Sharp: Node.js এর জন্য একটি জনপ্রিয় ইমেজ প্রসেসিং লাইব্রেরি।
আপনি ExpressJS-এ sharp ব্যবহার করে ইমেজ অপটিমাইজ করতে পারেন।
উদাহরণ: Sharp ব্যবহার করে ইমেজ অপটিমাইজেশন
const sharp = require('sharp');
const fs = require('fs');
// ইমেজ অপটিমাইজেশন
sharp('input-image.jpg')
.resize(800) // রিসাইজ করা
.toFile('output-image.jpg', (err, info) => {
if (err) {
console.log('Error:', err);
} else {
console.log('Optimized image:', info);
}
});
৩. Compression (কম্প্রেশন)
স্ট্যাটিক ফাইলগুলির সাইজ আরও কমানোর জন্য ফাইল কম্প্রেশন ব্যবহার করা যেতে পারে। আপনি compression মিডলওয়্যার ব্যবহার করে ExpressJS অ্যাপ্লিকেশনে Gzip বা Brotli কম্প্রেশন সক্ষম করতে পারেন।
উদাহরণ: Compression মিডলওয়্যার ব্যবহার করা
const compression = require('compression');
app.use(compression());
এটি HTTP রেসপন্সের সমস্ত ডেটা Gzip বা Brotli দ্বারা কম্প্রেস করে, যার ফলে ডেটা ট্রান্সমিশন দ্রুত হয় এবং ব্রাউজারের জন্য ডেটা ডাউনলোডের সময় কমে।
সারাংশ
ExpressJS-এ ক্যাশ কন্ট্রোল এবং স্ট্যাটিক ফাইল অপটিমাইজেশন ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনের পারফরম্যান্স এবং রেসপন্স টাইম উল্লেখযোগ্যভাবে উন্নত করা যেতে পারে। ক্যাশ কন্ট্রোল হেডারগুলো ব্রাউজারকে নির্দেশনা দেয় কিভাবে ফাইলগুলি ক্যাশ করতে হবে, যাতে পরবর্তী রিকোয়েস্টে ফাইলগুলি দ্রুত লোড হয়। এর পাশাপাশি, মিনিফিকেশন, ইমেজ অপটিমাইজেশন, এবং কম্প্রেশন ব্যবহার করে স্ট্যাটিক ফাইলের সাইজ কমিয়ে অ্যাপ্লিকেশনের লোড টাইম আরও দ্রুত করা সম্ভব।
Read more