Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Speed Optimization
  5. স্ট্যাটিক ফাইল ক্যাশিং ও কম্প্রেশন

স্ট্যাটিক ফাইল ক্যাশিং ও কম্প্রেশন

Django প্রজেক্ট সেটআপ এবং WhiteNoise কনফিগারেশন

Step 1: Django প্রজেক্ট তৈরি করা

প্রথমে আমরা একটি নতুন Django প্রজেক্ট তৈরি করব।

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

Step 2: settings.py ফাইল কনফিগার করা

WhiteNoise ইনস্টল করার জন্য প্রথমে আপনার Django প্রজেক্টের settings.py ফাইল কনফিগার করতে হবে।

WhiteNoise ইনস্টল করা:

pip install whitenoise

WhiteNoise Middleware যোগ করা:

settings.py ফাইলে MIDDLEWARE তালিকার মধ্যে WhiteNoise মডিউল যুক্ত করুন:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',  # WhiteNoise Middleware যোগ করুন
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # অন্যান্য middleware...
]

WhiteNoise কনফিগারেশন:

settings.py ফাইলে WhiteNoise এর স্ট্যাটিক ফাইল কনফিগারেশনের জন্য নিম্নোক্ত সেটিংস যোগ করুন:

# Static files settings
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']  # Project এর static ফাইল ডিরেক্টরি
STATIC_ROOT = BASE_DIR / 'staticfiles'  # collectstatic এর জন্য

# Whitenoise এর সাথে Gzip এবং Brotli কম্প্রেশন এনাবল করুন
WHITENOISE_USE_FINDERS = True
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
  • CompressedManifestStaticFilesStorage: এটি স্ট্যাটিক ফাইলগুলোকে কমপ্রেস করে এবং একটি চিরকালীন ক্যাশিং ইউআরএল তৈরি করে।

৩. প্রজেক্টের স্ট্যাটিক ফাইল সংগ্রহ করা (Collecting Static Files)

প্রোডাকশনে যেতে হলে collectstatic কমান্ড ব্যবহার করে সমস্ত স্ট্যাটিক ফাইল STATIC_ROOT ডিরেক্টরিতে সংগ্রহ করুন:

python manage.py collectstatic

Step 3: views.py ফাইল তৈরি করা

myapp/views.py ফাইলে একটি সিম্পল ভিউ তৈরি করুন:

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

Step 4: URLs সেটআপ করা

myproject/urls.py ফাইল আপডেট করুন:

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
]

Step 5: home.html ফাইল তৈরি করা

myapp/templates/home.html তৈরি করুন এবং কিছু CSS, JavaScript কোড যোগ করুন:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home Page</title>
    <link rel="stylesheet" href="{% static 'styles.css' %}">
    <script src="{% static 'scripts.js' %}"></script>
</head>
<body>
    <h1>Welcome to the Home Page!</h1>
</body>
</html>

Step 6: Static CSS এবং JS ফাইল তৈরি করা

CSS: myapp/static/styles.css ফাইলে নিম্নলিখিত কোড যোগ করুন:

body {
    background-color: #f0f0f0;
    text-align: center;
    font-family: Arial, sans-serif;
}

JavaScript: myapp/static/scripts.js ফাইলে নিম্নলিখিত কোড যোগ করুন:

console.log('JavaScript Loaded Successfully');

Step 7: Static Files সংগ্রহ করা (collectstatic)

WhiteNoise Middleware কাজ করার জন্য আপনাকে collectstatic কমান্ড চালাতে হবে:

python manage.py collectstatic

Step 8: সার্ভার চালানো এবং টেস্ট করা

python manage.py runserver

এখন, আপনার ব্রাউজারে http://127.0.0.1:8000/ এ যান এবং কনসোল চেক করুন। আপনি JavaScript Loaded Successfully কনসোলে দেখতে পাবেন।

Whitenoise এর মাধ্যমে Django প্রজেক্টের স্পিড কিভাবে বাড়ে?

  1. Gzip এবং Brotli কম্প্রেশন: Whitenoise স্বয়ংক্রিয়ভাবে ফাইলগুলোকে Gzip এবং Brotli ফরম্যাটে কমপ্রেস করে, যা ফাইলের সাইজকে ছোট করে এবং লোড টাইম কমায়।
  2. চিরকালীন ক্যাশিং: Whitenoise ফাইলগুলোর নামের শেষে একটি হ্যাশ যোগ করে, যা ব্রাউজারের ক্যাশিং সিস্টেমকে দীর্ঘ মেয়াদে ধরে রাখতে সহায়তা করে। উদাহরণস্বরূপ, style.css ফাইলটি কমপ্রেশন এবং হ্যাশ যুক্ত হয়ে style.abcdef123.css আকারে রূপান্তরিত হয়।
  3. 404 এবং 304 রেসপন্স হ্রাস: Whitenoise স্ট্যাটিক ফাইলগুলোর জন্য একবার ক্যাশে তৈরি করে এবং একই ফাইলের জন্য নতুন রিকোয়েস্টে সার্ভারকে আর রিসোর্স খুঁজতে হয় না। এটি 304 Not Modified রেসপন্স সংখ্যা কমায়।
  4. ব্রাউজারের কনটেন্ট ডেলিভারি স্পিড বৃদ্ধি: কমপ্রেসড এবং ক্যাশ করা ফাইলগুলো দ্রুত ব্রাউজারে পৌঁছায়, যা UI রেন্ডারিং দ্রুত করে এবং পেজের লোড টাইম কমায়।
  5. Middleware দ্বারা সরাসরি স্ট্যাটিক ফাইল সার্ভিং: Whitenoise, Django-এর নিজস্ব মিডলওয়্যার হিসেবে কাজ করে, যা স্ট্যাটিক ফাইল সরাসরি সার্ভ থেকে সরবরাহ করে। এর ফলে অ্যাপ্লিকেশন সার্ভারে অতিরিক্ত লোড পড়ে না এবং অ্যাপ্লিকেশন ব্যাকেন্ড প্রসেসে কোনো প্রভাব পড়ে না।

উদাহরণ দিয়ে Whitenoise এর ব্যবহার:

ধরুন আপনার প্রজেক্টে কিছু বড় JavaScript এবং CSS ফাইল রয়েছে যা প্রতিটি পেজ রেন্ডারে প্রয়োজন হয়। Whitenoise ইনস্টল এবং কনফিগার করার পর এগুলো স্বয়ংক্রিয়ভাবে কমপ্রেস হয়ে এবং চিরস্থায়ী ক্যাশিংয়ের মাধ্যমে ব্রাউজারে পৌঁছাবে।

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

Whitenoise-এর এই সুবিধাগুলো Django প্রজেক্টকে অপ্টিমাইজ করে এবং হোস্টিং খরচও সাশ্রয় করে, কারণ অতিরিক্ত CDN বা স্ট্যাটিক ফাইল সার্ভারের প্রয়োজন হয় না।

WhiteNoise এর কাজ দেখানো এবং স্ট্যাটিক ফাইল ক্যাশিং

WhiteNoise এর কাজ

WhiteNoise Middleware এর মাধ্যমে স্ট্যাটিক ফাইলগুলিকে compressed format এ সার্ভ করা হয় এবং STATICFILES_STORAGE এর কনফিগারেশনের কারণে, একটি ক্যাশিং মেকানিজম তৈরী হয় যাতে ব্রাউজার সবসময় নতুন ফাইল লোড না করে।

Test:

আপনি Network ট্যাব খুলে ব্রাউজারে পেজটি রিফ্রেশ করে চেক করতে পারেন। দেখবেন CSS এবং JS ফাইলগুলোতে status হিসেবে (200 OK Cached) দেখাচ্ছে, এর মানে ব্রাউজার ক্যাশিং সফলভাবে কাজ করছে।

WhiteNoise ব্যবহারের পরে আপনাকে অতিরিক্ত {% load cache %} ট্যাগ ব্যবহারের প্রয়োজন নেই। WhiteNoise মূলত আপনার Django অ্যাপ্লিকেশনের স্ট্যাটিক ফাইল (CSS, JS, ইমেজ ইত্যাদি) সার্ভ করার জন্য ব্যবহার করা হয় এবং এটি ব্রাউজার ক্যাশিং এবং Gzip/Brotli কম্প্রেশন প্রদান করে।

{% load cache %} ট্যাগ টেমপ্লেটের HTML অংশগুলো ক্যাশ করার জন্য ব্যবহৃত হয়। এটি মূলত ডায়নামিক কন্টেন্টকে (যেমন: ডাটাবেস থেকে প্রাপ্ত তথ্য) বারবার রেন্ডার করা থেকে বাঁচায় এবং HTML অংশের রেন্ডারিং টাইম কমায়।

How can we help?