ওয়েবসাইট স্পিড
# ওয়েবসাইট স্পিড ও এপিআই অপ্টিমাইজেশন ব্লুপ্রিন্ট (Pixahunt Performance Master Guide)
এই ডকুমেন্টেশনে পিক্সাহান্টের সকল এপিআই (মোবাইল অ্যাপস, গ্যাজেট, ওয়ালপেপার, স্টক ফটো, এসভিজি, পিসি বিল্ডার, পাওয়ার সাপ্লাই ক্যালকুলেটর, কমিউনিটি ডিসকাশন ইত্যাদি) এবং প্রধান ওয়েবসাইটের গতি অভাবনীয়ভাবে বৃদ্ধি করার বাস্তবমুখী কৌশল, ক্লাউডফ্লেয়ার এজ ক্যাশিং ও সার্ভার কনফিগারেশন বিস্তারিত লিপিবদ্ধ করা হলো।
---
## ১. বর্তমান অবস্থা: লোকাল মেশিনে ওয়েবসাইট ও এপিআই স্লো লাগার আসল কারণ
আপনার লোকাল ডেভেলপমেন্ট মেশিনে সাইট বা এপিআই লোড হতে বেশি সময় লাগার কারণ কোডের কোনো সমস্যা নয়, এর প্রধান কারিগরি কারণ হলো **ফাইবার অপটিক নেটওয়ার্ক লেটেন্সি (Network Round-Trip Latency)**:
- আপনার লোকাল মেশিনের `.env` ফাইলে ডাটাবেস হোস্ট দেওয়া আছে রিমোট সার্ভারের আইপি: `DB_HOST=158.220.125.32`
- আপনি বাংলাদেশ থেকে যখনই লোকাল সাইটে কোনো পেজ বা এপিআই হিট করছেন, আপনার কম্পিউটার থেকে প্রতিবার জার্মানি/ইউরোপের সার্ভারে ইন্টারনেট তারের মাধ্যমে ডাটাবেস কুয়েরি যাচ্ছে এবং উত্তর আসছে।
- আন্তর্জাতিক পিং লেটেন্সি প্রতিবার প্রায় **২৫০ms - ৫০০ms**। একটি পেজে যদি ৮-১০টি এসকিউএল (SQL) কুয়েরি চলে, তাহলে শুধুমাত্র নেটওয়ার্ক পিং লেটেন্সিতেই ৩ থেকে ৪ সেকেন্ড নষ্ট হয়ে যায়!
### লাইভ সার্ভারে (aaPanel) কী ঘটবে?
- যখন আপনার কোড aaPanel লাইভ সার্ভারে ডেপ্লয় করা হবে, তখন `.env` ফাইলে থাকবে: `DB_HOST=127.0.0.1` বা `localhost`।
- তখন ওয়েব সার্ভার (PHP-FPM) এবং ডাটাবেস সার্ভার (MySQL) একই মেশিনে লোকাল লিনাক্স সকেট (`/var/run/mysqld/mysqld.sock`) দিয়ে যোগাযোগ করবে।
- নেটওয়ার্ক পিং লেটেন্সি ২৫০ms থেকে সরাসরি নেমে আসবে **০.২ms (শূন্য দশমিক দুই মিলিসেকেন্ড)**-এ! ফলে লাইভ সার্ভারে সমস্ত পেজ ও এপিআই এক নিমেষেই লোড হবে।
---
## ২. ক্লাউডফ্লেয়ার (Cloudflare) দিয়ে এপিআই ও ওয়েবসাইটের স্পিড বাড়ানোর উপায়
**হ্যাঁ, Cloudflare ব্যবহার করে সকল পাবলিক এপিআই এবং মূল ওয়েবসাইটের স্পিড অনেক গুণ বাড়ানো সম্ভব।**
### ক. Cloudflare-এর সুপারপাওয়ার ও সুবিধা
1. **ঢাকার এজ ডাটা সেন্টার (Edge PoP):**
- Cloudflare-এর ডাটা সেন্টার সরাসরি ঢাকা, বাংলাদেশে অবস্থান করছে।
- বাংলাদেশের মোবাইল ইউজার ও ভিজিটররা মূল সার্ভারে হিট না করে ঢাকার লোকাল এজ থেকেই মাত্র **১০ms - ২৫ms**-এ রেসপন্স পেয়ে যাবে।
2. **GET API Response Edge Caching:**
- মোবাইল অ্যাপ ও ওয়েবের সমস্ত পাবলিক রিড-ওনলি এপিআই Cloudflare Edge-এ ক্যাশ করা সম্ভব।
- ১ লক্ষ ভিজিটরও যদি একই প্রোডাক্ট স্পেসিফিকেশন, ব্র্যান্ড লিস্ট বা ক্যাটাগরি সার্চ করে, আপনার নিজস্ব সার্ভারে ১ বারও চাপ পড়বে না। Cloudflare এজ থেকে সরাসরি সুপারফাস্ট JSON রেসপন্স ডেলিভারি হবে।
3. **Brotli কম্প্রেশন ও HTTP/3 (QUIC):**
- টেক্সট, এইচটিএমএল এবং JSON ডেটাকে Cloudflare ৭০% থেকে ৮০% পর্যন্ত কম্প্রেস করে পাঠায়, ফলে স্লো 3G/4G নেটওয়ার্কেও ডেটা কয়েক মিলি-সেকেন্ডে ট্রান্সফার হয়।
4. **Bandwidth ও সার্ভার লোড সাশ্রয়:**
- আপনার হোস্টিং সার্ভারের CPU/RAM ব্যবহার ৯০% কমে যাবে, ফলে সার্ভার কখনোই হ্যাং বা ক্র্যাশ করবে না।
### খ. ক্লাউডফ্লেয়ারের সীমাবদ্ধতা (কোন জিনিস ক্যাশ করা যাবে না)
1. **ইউজার অথেনটিকেশন ও পার্সোনাল ড্যাশবোর্ড:**
- ইউজার লগইন (`/api/v1/auth/*`), প্রোফাইল আপডেট, ইনভয়েস ক্রিয়েট, রেটিং সাবমিট ইত্যাদি কখনোই পাবলিকলি ক্যাশ করা যাবে না (ক্যাশ করলে এক ইউজারের ডেটা আরেকজন দেখতে পাবে)। এই রিকোয়েস্টগুলোকে অবশ্যই বাইপাস (Bypass Cache) করতে হবে।
---
## ৩. Cloudflare-এ এপিআই ক্যাশিং রুলস কনফিগারেশন (Step-by-Step Rules)
Cloudflare ড্যাশবোর্ডে লগইন করে আপনার ডোমেইনে প্রবেশ করুন, এরপর বাম পাশের মেনু থেকে **Caching -> Cache Rules**-এ গিয়ে নিচের রুলগুলো যুক্ত করুন:
### Rule 1: Public Read-Only APIs (ক্যাশ অন - Superfast Delivery)
- **Expression Rule:**
```text
(http.request.method eq "GET" and (
http.request.uri.path starts_with "/api/apps/v1/gadget" or
http.request.uri.path starts_with "/api/apps/v1/wallpaper" or
http.request.uri.path starts_with "/api/apps/v1/tools" or
http.request.uri.path starts_with "/api/v1/gadget" or
http.request.uri.path starts_with "/api/wallpapers" or
http.request.uri.path starts_with "/api/svgs" or
http.request.uri.path starts_with "/gadget/compare/search" or
http.request.uri.path starts_with "/photos" or
http.request.uri.path starts_with "/wallpapers"
))
```
- **Cache Eligibility:** `Eligible for cache`
- **Edge Cache TTL:** `Ignore origin, set to 15 minutes` (অথবা `30 minutes`)
- **Browser Cache TTL:** `Bypass by default` (যাতে ব্রাউজারে আটকে না থেকে ফ্রেশ ডেটা আসে)
### Rule 2: User Dashboard & Private Dynamic APIs (ক্যাশ অফ - বাধ্যতামূলক)
- **Expression Rule:**
```text
(http.request.uri.path starts_with "/user" or
http.request.uri.path starts_with "/admin" or
http.request.uri.path starts_with "/api/v1/auth" or
http.request.uri.path starts_with "/api/apps/v1/auth" or
http.request.uri.path starts_with "/api/apps/v1/user" or
http.request.method in {"POST" "PUT" "DELETE" "PATCH"})
```
- **Cache Eligibility:** `Bypass cache`
---
## ৪. লাইভ সার্ভার (aaPanel) সুপারফাস্ট করার ৬টি সোনালী ধাপ (Production Blueprint)
যখন প্রজেক্টটি aaPanel লাইভ প্রোডাকশন সার্ভারে চলবে, নিচের সেটিংসগুলো বাধ্যতামূলকভাবে কনফিগার করুন:
1. **লোকাল ডাটাবেস হোস্ট (`DB_HOST`):**
- লাইভ সার্ভারে `.env` ফাইলে অবশ্যই `DB_HOST=127.0.0.1` বা `localhost` দিন। এটি নেটওয়ার্ক পিং সময়কে ০.২ মিলিসেকেন্ডে নামিয়ে আনবে।
2. **PHP OPcache সক্রিয় করা (Speed 3x Booster):**
- aaPanel -> App Store -> PHP -> Setting -> Extensions -> **opcache** ইনস্টল ও এনাবল করুন।
- `php.ini` কনফিগারেশনে নিচের মানগুলো নিশ্চিত করুন:
```ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
```
3. **Redis অবজেক্ট ও সেশন ক্যাশিং:**
- aaPanel-এ **Redis** ইনস্টল করুন।
- Laravel `.env`-এ দিন:
```env
CACHE_STORE=redis
SESSION_DRIVER=redis
REDIS_HOST=127.0.0.1
```
4. **MySQL InnoDB Buffer Pool সাইজিং:**
- aaPanel -> App Store -> MySQL -> Setting -> Performance Adjustment এ গিয়ে `innodb_buffer_pool_size` আপনার সার্ভার র্যামের ৫০% (যেমন: ২ জিবি র্যাম থাকলে ১ জিবি) সেট করুন। এতে ডাটাবেস টেবিল ডিস্ক থেকে না পড়ে সরাসরি র্যাম থেকে পড়বে।
5. **Laravel প্রোডাকশন অপ্টিমাইজেশন কমান্ড রান করা:**
- কোড ডেপ্লয় করার পর একবার টার্মিনালে এই কমান্ডগুলো রান করুন:
```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
```
6. **Nginx Gzip / Brotli কম্প্রেশন:**
- aaPanel Nginx কনফিগারেশনে `gzip on;` এবং `gzip_types application/json text/css text/javascript application/javascript;` চালু রাখুন।
---
## ৫. ব্যাকএন্ড কোড লেভেল অপ্টিমাইজেশন (যা ইতোমধ্যে কমপ্লিট করা হয়েছে)
1. **In-Memory Catalog Caching:**
- গ্যাজেট ক্যাটালগ ও কম্প্যারিজনের জন্য আমরা অলরেডি ইন-মেমোরি ফ্ল্যাট জয়েন ক্যাশ আর্কিটেকচার বাস্তবায়ন করেছি, যা ৪,৫০০ms-এর কুয়েরি সময়কে **১৫ms**-এ নামিয়ে এনেছে।
2. **N+1 কোয়েরি সম্পূর্ণ নির্মূল:**
- লুপের ভেতর একাধিক রিলেশন কুয়েরি বাদ দিয়ে `with()` এবং একক কালেকশন ফিল্টারিং ব্যবহার করা হয়েছে।
3. **ব্রাউজার ও CDN ক্যাশিং হেডার্স:**
- রেসপন্সে যথাযথ `Cache-Control` হেডার প্রদান করা।
4. **Bunny CDN মিডিয়া স্ট্যান্ডার্ড:**
- সমস্ত ইমেজ, ওয়ালপেপার, ব্যানার লোকাল ডিস্কের বদলে অফিসিয়াল Bunny CDN থেকে লোড হচ্ছে, ফলে মূল সার্ভারের ব্যান্ডউইথ একেবারেই ফ্রি থাকে।
---
## ৬. সংক্ষেপে চূড়ান্ত চেকলিস্ট (Quick Summary)
| উপাদান | সুপারিশকৃত সমাধান | প্রত্যাশিত গতি |
| :--- | :--- | :--- |
| **পাবলিক API (Gadget/Tool/Media)** | Cloudflare Cache Rules (ঢাকার Edge PoP) | **১০ms - ২৫ms** |
| **ডাটাবেস এক্সেস (লাইভ)** | Local MySQL Socket (`DB_HOST=127.0.0.1`) | **০.২ms** |
| **PHP কোড এক্সিকিউশন** | PHP OPcache (aaPanel Extension) | **৩ গুণ দ্রুত** |
| **ক্যাশ ও সেশন** | Redis In-Memory Store | **১ms** |
| **ছবি ও মিডিয়া ফাইল** | Bunny CDN (Offloaded) | **ইনস্ট্যান্ট ক্যাশড লোডিং** |
---
## ৭. পিএইচপি এক্সটেনশন ও কনভার্টার ইঞ্জিন রিকোয়ারমেন্ট (PHP Extensions & Converter Blueprint)
পিক্সাহান্টের ফাইল কনভার্টার (PDF to Image, SVG Vector Engine, Photo Resizer, Video Converter, Zip Bundler) এবং কোর সিস্টেম শতভাগ সচল ও ত্রুটিমুক্ত রাখতে সার্ভারে নিম্নলিখিত PHP এক্সটেনশন ও ফাংশনগুলো ইনস্টল ও সক্রিয় থাকা বাধ্যতামূলক:
### ক. মিডিয়া ও ফাইল কনভার্টার এক্সটেনশন (Media & File Converters)
| এক্সটেনশন / টুল | ধরন | কাজের ক্ষেত্র ও গুরুত্ব | aaPanel ইনস্টল করার নিয়ম |
| :--- | :--- | :--- | :--- |
| **ImageMagick (`imagick`)** | PHP Extension | **অতি আবশ্যক (Critical):** পিডিএফ থেকে ইমেজ রূপান্তর, ভেক্টর SVG প্রসেসিং, WebP, AVIF, TIFF ও PSD কনভার্ট করতে অপরিহার্য। এটি অফ থাকলে পিডিএফ ও ভেক্টর কনভার্টারে ত্রুটি দেখা দেবে। | aaPanel -> App Store -> PHP -> Setting -> Extensions -> **imagick** ইনস্টল ও এনাবল করুন। |
| **GD Library (`gd`)** | PHP Extension | **অতি আবশ্যক (Critical):** ইমেজ রিসাইজিং, থাম্বনেইল তৈরি, ওয়াটারমার্ক স্ট্যাম্পিং ও কালার প্রোফাইল ম্যানেজমেন্ট। | PHP Setting -> Extensions থেকে **gd** এনাবল করুন। |
| **File Information (`fileinfo`)** | PHP Extension | **অতি আবশ্যক (Critical):** আপলোডকৃত সমস্ত মিডিয়া ও ডকুমেন্টের আসল বাইনারি MIME টাইপ যাচাইকরণ যাতে অনিরাপদ ফাইল ব্লক করা যায়। | PHP Setting -> Extensions থেকে **fileinfo** ইনস্টল করুন। |
| **ZipArchive (`zip`)** | PHP Extension | **অতি আবশ্যক (Critical):** বাল্ক ডাউনলোড, ভেক্টর বান্ডেল ও মকআপ জিপ আর্কাইভ তৈরি এবং এক্সট্রাক্ট করা। | PHP Setting -> Extensions থেকে **zip** ইনস্টল করুন। |
| **EXIF Metadata (`exif`)** | PHP Extension | **উচ্চ গুরুত্ব (High):** ক্যামেরা মডেল, শাটার স্পিড, আইএসও এবং ফটোর অরিজিনাল রোটেশন/অরিয়েন্টেশন এক্সট্রাক্ট করা। | PHP Setting -> Extensions থেকে **exif** ইনস্টল করুন। |
### খ. সার্ভার কমান্ড ও কনভার্টার বাইনারি (CLI Engines)
| ফাংশন / বাইনারি | ধরন | কাজের ক্ষেত্র | aaPanel কনফিগারেশন নির্দেশিকা |
| :--- | :--- | :--- | :--- |
| **PHP `exec()`** | Core Function | সার্ভারে ব্যাকগ্রাউন্ড কনভার্টার প্রসেস ও CLI টুলস রান করার অনুমতি। | aaPanel -> PHP Setting -> **Disabled functions** তালিকা থেকে `exec` সিলেক্ট করে রিমুভ (Delete) করুন। |
| **PHP `shell_exec()`** | Core Function | সিস্টেম শেল স্ক্রিপ্ট ও ব্যাকগ্রাউন্ড কনভার্টার স্পন করার পারমিশন। | aaPanel -> PHP Setting -> **Disabled functions** তালিকা থেকে `shell_exec` সিলেক্ট করে রিমুভ (Delete) করুন। |
| **FFmpeg Binary** | Linux Binary | ভিডিও কনভার্শন ও ভিডিও ফাইল থেকে হাই-রেজোলিউশন থাম্বনেইল ফ্রেম বের করা। | aaPanel Terminal বা SSH-এ রান করুন: `sudo apt update && sudo apt install ffmpeg` |
| **Ghostscript (`gs`)** | Linux Binary | উন্নত পিডিএফ রেন্ডারিং এবং ভেক্টর ইপিএস/পিডিএফ রাস্টারিং। | aaPanel Terminal বা SSH-এ রান করুন: `sudo apt install ghostscript` |
### গ. স্পিড, ক্যাশিং ও কোর ফ্রেমওয়ার্ক এক্সটেনশন
| এক্সটেনশন | গুরুত্ব | প্রয়োজনীয়তার কারণ | aaPanel অ্যাকশন |
| :--- | :--- | :--- | :--- |
| **Zend OPcache** | Critical (Speed) | PHP বাইটকোড মেমোরিতে প্রি-কম্পাইল করে রাখে (সাইট ৩ গুণ ফাস্ট হয়)। | PHP Extensions -> **opcache** ইনস্টল |
| **Redis** | High (Speed) | ইন-মেমোরি অবজেক্ট ক্যাশ ও সেশন হ্যান্ডলিং (`CACHE_STORE=redis`)। | PHP Extensions -> **redis** ইনস্টল |
| **cURL (`curl`)** | Critical (Network) | Cloudflare, Bunny CDN, Gemini AI এবং ক্লাউড এপিআই যোগাযোগ। | PHP Extensions -> **curl** সচল রাখুন |
| **mbstring** | Critical (Language) | বাংলা ভাষা ও আন্তর্জাতিক ইউনিকোড টেক্সট হ্যান্ডলিং। | PHP Extensions -> **mbstring** ইনস্টল |
| **bcmath** | Critical (Math) | প্রিসিশন গণিত, ওয়াটেজ ও হিসাব নিকাশ। | PHP Extensions -> **bcmath** ইনস্টল |
| **pdo_mysql** | Critical (Database) | MySQL ডাটাবেস সংযোগ। | PHP Extensions -> **pdo_mysql** সচল রাখুন |
---
## ৮. সার্ভার PHP কনফিগারেশন প্যারামিটার (aaPanel php.ini Recommendations)
কনভার্টার ইঞ্জিনগুলোতে বড় সাইজের ফটো বা ফাইল প্রসেস করতে `php.ini`-তে নিচের মানগুলো নিশ্চিত করুন:
```ini
memory_limit = 512M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
max_input_time = 300
```
### টার্মিনালে এক্সটেনশন যাচাই করার কমান্ড:
```bash
php -m | grep -E "imagick|gd|redis|opcache|fileinfo|zip|exif|bcmath|curl|mbstring"
```