وردپرس

آموزش افزایش سرعت سایت وردپرسی — از هاست تا کش

سایت وردپرسی که ۶ ثانیه طول می‌کشد بالا بیاید، قبل از اینکه اولین جمله‌اش خوانده شود نیمی از بازدیدکننده‌ها را از دست داده است. خبر خوب این است که افزایش سرعت وردپرس نه جادو می‌خواهد نه هزینه‌ی نجومی؛ یک رویکرد لایه‌به‌لایه می‌خواهد: از زیرساخت هاست شروع می‌کنید، به کش می‌رسید و در آخر خودِ محتوا را سبک می‌کنید. در این مقاله همین مسیر را قدم‌به‌قدم، با دستورها و اعداد واقعی، طی می‌کنیم.

لایه‌ی صفر: زیرساختی که وردپرس روی آن نفس می‌کشد

هیچ افزونه‌ی کشی نمی‌تواند دیسک کُند و سرور آن‌سر دنیا را جبران کند. قبل از نصب هر چیزی، سه مشخصه‌ی زیرساخت را چک کنید:

  • دیسک NVMe — وردپرس در هر بازدید ده‌ها فایل PHP می‌خواند و چندین کوئری MySQL می‌زند. NVMe در خواندن تصادفی حدود ۱۰ برابر سریع‌تر از SSD معمولی و ده‌ها برابر سریع‌تر از هارد چرخشی است؛ یعنی مستقیماً روی TTFB (زمان دریافت اولین بایت) اثر می‌گذارد.
  • PHP 8.3 — بنچمارک‌های رسمی وردپرس نشان می‌دهند PHP 8.x نسبت به ۷.۴ حدود ۲۰ تا ۳۰ درصد درخواست بیشتری در ثانیه پاسخ می‌دهد. اگر هنوز روی ۷.۴ هستید، فقط با یک ارتقا سرعت رایگان می‌گیرید.
  • سرور داخل ایران برای بازدیدکننده‌ی ایرانی — پینگ کاربر ایرانی به سرور اروپا معمولاً ۸۰ تا ۱۵۰ میلی‌ثانیه است و به سرور داخل کشور زیر ۳۰. چون هر صفحه ده‌ها رفت‌وبرگشت شبکه دارد، این اختلاف چند صد میلی‌ثانیه در زمان بارگذاری واقعی تفاوت ایجاد می‌کند. سرورهای ابری مهران هاست دقیقاً به همین دلیل در دیتاسنتر داخل ایران و روی NVMe ارائه می‌شوند — و چون ساعتی حساب می‌شوند، می‌توانید قبل از مهاجرت کامل، یکی دو روز تست بگیرید.

نسخه‌ی PHP فعلی‌تان را همین حالا بررسی کنید:

php -v
# روی سرور اوبونتو، ارتقا به 8.3:
sudo apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd \
  php8.3-mbstring php8.3-xml php8.3-zip php8.3-imagick

کش وردپرس: بزرگ‌ترین جهش در افزایش سرعت وردپرس

ایده‌ی کش صفحه ساده است: وردپرس برای ساختن هر صفحه، PHP اجرا می‌کند و به دیتابیس کوئری می‌زند. اما صفحه‌ای که برای همه‌ی بازدیدکننده‌ها یکسان است، چرا باید هر بار از نو ساخته شود؟ کش وردپرس خروجی HTML آماده را یک بار می‌سازد و دفعات بعد همان را تحویل می‌دهد — بدون PHP، بدون دیتابیس.

راه ساده: افزونه‌ی کش

اگر به سرور دسترسی root ندارید یا نمی‌خواهید درگیر کانفیگ شوید، WP Super Cache (ساده و قابل‌اعتماد) یا W3 Total Cache (پرامکانات‌تر ولی پیچیده‌تر) را نصب کنید. در WP Super Cache فقط کافی است حالت «Caching On» و روش «Expert» (mod_rewrite) را فعال کنید تا فایل‌های HTML مستقیم سرو شوند.

راه حرفه‌ای: fastcgi_cache در Nginx

اگر سرور مجازی خودتان را دارید، کش در لایه‌ی وب‌سرور از هر افزونه‌ای سریع‌تر است، چون درخواست اصلاً به PHP نمی‌رسد. در کانفیگ Nginx:

fastcgi_cache_path /var/cache/nginx levels=1:2
    keys_zone=WORDPRESS:100m inactive=60m;

server {
    # ... تنظیمات فعلی سایت ...
    set $skip_cache 0;
    if ($request_method = POST) { set $skip_cache 1; }
    if ($query_string != "")    { set $skip_cache 1; }
    if ($http_cookie ~* "comment_author|wordpress_logged_in|wp-postpass") {
        set $skip_cache 1;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 60m;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        add_header X-Cache $upstream_cache_status;
    }
}

هدر X-Cache به شما می‌گوید هر درخواست از کش آمده (HIT) یا نه (MISS). اگر با Nginx آشنا نیستید، اول راهنمای راه‌اندازی سایت با Nginx را بخوانید.

⚠️ کاربر لاگین‌شده و سبد خرید ووکامرس نباید کش شوند — شرط‌های skip_cache بالا دقیقاً همین را کنترل می‌کنند. اگر فروشگاه دارید، بعد از فعال‌سازی کش حتماً فرایند خرید را با یک کاربر تست کنید.

OPcache: کشِ خودِ PHP را روشن کنید

حتی وقتی صفحه کش نمی‌شود (مثلاً برای کاربر لاگین‌شده)، لازم نیست PHP هر بار فایل‌های وردپرس را از نو کامپایل کند. OPcache بایت‌کد کامپایل‌شده را در حافظه نگه می‌دارد و در PHP های مدرن به‌طور پیش‌فرض فعال است — ولی مقادیر پیش‌فرضش برای وردپرس کوچک است. در php.ini این مقادیر را بگذارید:

opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=16000
opcache.validate_timestamps=1
opcache.revalidate_freq=60

و بعد sudo systemctl reload php8.3-fpm. همین چند خط معمولاً ۲ تا ۳ برابر توان پاسخ‌گویی PHP را بالا می‌برد و برای بهینه سازی وردپرس یکی از کم‌زحمت‌ترین برد‌هاست.

تصاویر: سنگین‌ترین مسافر هر صفحه

در یک صفحه‌ی معمولی وردپرس، بیش از نیمی از حجم دانلود، تصویر است. سه کار عملی:

  1. فرمت WebP — همان کیفیت با ۲۵ تا ۳۵ درصد حجم کمتر نسبت به JPEG. افزونه‌هایی مثل EWWW Image Optimizer یا Imagify تصاویر قدیمی را هم یک‌جا تبدیل می‌کنند.
  2. ابعاد درست — تصویر ۴۰۰۰ پیکسلی را برای باکسی که ۸۰۰ پیکسل نمایش می‌دهد آپلود نکنید؛ وردپرس سایزهای میانی می‌سازد، ولی قالب باید از آن‌ها استفاده کند.
  3. Lazy loading — وردپرس از نسخه‌ی ۵.۵ به‌طور پیش‌فرض loading="lazy" می‌گذارد؛ فقط مطمئن شوید افزونه یا قالبی آن را خراب نکرده باشد.
💡 نکته: تصویر بزرگ بالای صفحه (hero) را از lazy loading مستثنا کنید و به آن fetchpriority="high" بدهید؛ وگرنه بدترین معیار سرعت‌تان یعنی LCP آسیب می‌بیند.

رژیم افزونه و خانه‌تکانی دیتابیس

ارزان‌ترین راه افزایش سرعت وردپرس، اضافه‌کردن چیزی نیست؛ حذف چیزهایی است که لازم ندارید.

افزونه کم، سایت سبک

هر افزونه‌ی فعال یعنی PHP بیشتر در هر درخواست و اغلب چند فایل CSS/JS اضافه در هر صفحه. قاعده‌ی سرانگشتی: بالای ۲۰ افزونه‌ی فعال، وقت بازنگری است. با افزونه‌ی رایگان Query Monitor ببینید کدام افزونه‌ها کندترین کوئری‌ها و بیشترین زمان اجرا را دارند و برای همان‌ها جایگزین سبک‌تر پیدا کنید — افزونه‌های اسلایدر، آمارگیر داخلی و بیلدرهای سنگین معمولاً متهم‌های ردیف اول‌اند.

دیتابیس را جارو کنید

جدول wp_options پر از داده‌های موقتی (transient) منقضی‌شده می‌شود و ریویژن‌های بی‌پایان پست‌ها جدول wp_posts را باد می‌کنند. افزونه‌ی WP-Optimize با چند کلیک ریویژن‌ها، پیش‌نویس‌های خودکار، کامنت‌های اسپم و transient های مرده را پاک می‌کند و جدول‌ها را بهینه می‌کند. برای اینکه مشکل دوباره جمع نشود، در wp-config.php سقف ریویژن بگذارید:

define('WP_POST_REVISIONS', 5);
⚠️ قبل از هر عملیات روی دیتابیس، بکاپ بگیرید: wp db export backup.sql با WP-CLI یا خروجی گرفتن از phpMyAdmin. سی ثانیه احتیاط، ساعت‌ها پشیمانی را حذف می‌کند.

اندازه‌گیری: بدون عدد، بهینه‌سازی حدس است

سرعت سایت وردپرس را قبل و بعد از هر تغییر بسنجید، وگرنه نمی‌فهمید کدام کار جواب داده. سه ابزار کافی است:

  • PageSpeed Insights — معیارهای Core Web Vitals (مخصوصاً LCP) را با داده‌ی کاربران واقعی نشان می‌دهد؛
  • GTmetrix — آبشار بارگذاری (waterfall) را می‌دهد تا ببینید دقیقاً کدام فایل گلوگاه است؛
  • curl از خود سرور — برای سنجش TTFB خالص بدون دخالت مرورگر:
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" https://example.com/

انتظار واقع‌بینانه از هر لایه چیست؟ جدول زیر جمع‌بندی تجربی برای یک سایت وردپرسی معمولی است:

اقدامقبل (معمول)بعد (معمول)
ارتقا PHP 7.4 به 8.3 + OPcacheTTFB حدود ۸۰۰msTTFB حدود ۴۵۰ms
کش صفحه (افزونه یا fastcgi_cache)TTFB حدود ۴۵۰msTTFB زیر ۱۰۰ms
سرور داخل ایران برای کاربر ایرانیپینگ ۸۰–۱۵۰msپینگ زیر ۳۰ms
WebP + lazy loadingحجم صفحه حدود ۳MBحجم صفحه حدود ۱MB
حذف افزونه‌های سنگین + بهینه‌سازی دیتابیسبارگذاری کامل ۵–۶sبارگذاری کامل ۲–۳s

اعداد دقیق سایت شما فرق خواهد کرد، ولی ترتیب اثرگذاری تقریباً همیشه همین است: اول زیرساخت و کش، بعد تصاویر، بعد جزئیات.

قدم بعدی

افزایش سرعت وردپرس یک پروژه‌ی یک‌روزه نیست، ولی همین امروز می‌توانید دو لایه‌ی پراثرش را فعال کنید: PHP 8.3 با OPcache و یک کش صفحه‌ی درست‌وحسابی. اگر می‌خواهید قبل از دست‌کاری سایت اصلی، همه‌چیز را روی یک سرور آزمایشی تمرین کنید، با چند هزار تومان شارژ کیف پول یک سرور ابری ساعتی بسازید، چند ساعت تست بگیرید و بعد با خیال راحت روی سایت اصلی اعمال کنید. برای امن نگه‌داشتن همان سرور هم راهنمای امنیت سرور لینوکس را از دست ندهید.

آموزش‌های مرتبط

آماده‌ی تمرین عملی هستی؟

سرور ابری ساعتی مهران هاست در ۶۰ ثانیه تحویل می‌شود — تمرین کن، و فقط بابت همان ساعت‌ها پرداخت کن.