بیشتر توصیه‌های افزایش سرعت وردپرس از آخر شروع می‌کنند: «این افزونه‌ی کش را نصب کنید.» ولی اگر نمی‌دانید کندی از کجاست، ممکن است ساعت‌ها چیزی را بهینه کنید که مشکل نبوده است.

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

سرعت وردپرس را اول چطور اندازه بگیریم؟#

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

  1. ابزار PageSpeed Insights گوگل یا بخش Lighthouse در ابزار توسعه‌دهنده‌ی مرورگر را باز کنید.
  2. سه صفحه را بسنجید: صفحه‌ی اصلی، یک نوشته و اگر فروشگاه دارید یک محصول.
  3. نتیجه‌ی گوشی را ملاک بگیرید، نه رایانه.
  4. در سربرگ Network ابزار توسعه‌دهنده، زمان اولین درخواست و حجم کل صفحه را یادداشت کنید.
  5. هر تغییر را جدا اعمال کنید و دوباره بسنجید.

کندی از سرور است یا از خود صفحه؟#

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

نشانهعلت محتملکجا اصلاح شود
زمان پاسخ سرور بالا در همه‌ی صفحه‌هانبود کش صفحه، افزونه‌ی سنگین، هاست ضعیفکش صفحه، حذف افزونه
صفحه‌ی سنگین با حجم زیادتصویر بزرگ، اسلایدر، ویدیوتصویر و قالب
درخواست‌های زیاد CSS و JSافزونه‌هایی که روی همه‌ی صفحه‌ها فایل می‌گذارندافزونه‌ها و قالب
پیشخوان کند ولی سایت سریعدیتابیس سنگین، کارهای پس‌زمینهدیتابیس و کرون
خطای ۵۰۸ یا کندی در ساعت‌های شلوغرسیدن به سقف منابع هاستکش و منابع هاست

مورد آخر را جدی بگیرید؛ در خطای ۵۰۸ و سقف منابع هاست توضیح داده‌ایم چه چیزی منابع را تمام می‌کند.

کش صفحه چطور سرعت را بالا می‌برد؟#

کش صفحه نسخه‌ی آماده‌ی هر صفحه را نگه می‌دارد تا برای بازدید بعدی، وردپرس و دیتابیس دوباره اجرا نشوند. این پراثرترین کار برای سایت‌های محتوایی روی هاست اشتراکی است.

مسیر درخواست از مرورگر به کش صفحه، وردپرس، کش شیء و دیتابیس
  • روی سرور LiteSpeed افزونه‌ی کش مخصوص LiteSpeed را نصب کنید. این افزونه از کش خود وب‌سرور استفاده می‌کند که سریع‌تر از کش در سطح PHP است.
  • روی Apache یک افزونه‌ی کش صفحه‌ی معتبر کافی است.
  • فقط یک افزونه‌ی کش. دو افزونه‌ی کش یا دو افزونه‌ی فشرده‌سازی معمولاً سایت را خراب می‌کنند.
  • صفحه‌های شخصی کش نشوند. سبد خرید، تسویه‌حساب و حساب کاربری نباید کش شوند؛ افزونه‌های معتبر این را خودشان رعایت می‌کنند، ولی یک بار امتحان کنید.

تصویرها را چطور سبک کنیم؟#

با اندازه‌ی درست، قالب WebP و بارگذاری تنبل. تصویر معمولاً بیشترین حجم صفحه است.

  • تصویر چهار هزار پیکسلی را برای ستونی با عرض هشتصد پیکسل بارگذاری نکنید؛ قبل از بارگذاری کوچکش کنید.
  • افزونه‌ی بهینه‌سازی تصویر یا افزونه‌ی کش را طوری تنظیم کنید که نسخه‌ی WebP بسازد.
  • وردپرس تصویرهای پایین صفحه را به‌طور پیش‌فرض با تأخیر بارگذاری می‌کند؛ این رفتار را برای تصویر اول صفحه، که باید فوراً دیده شود، با تنظیمات قالب یا افزونه‌ی کش استثنا کنید.

فایل‌های CSS، JS و فونت را چطور کم کنیم؟#

با حذف افزونه‌ی بی‌کار، کم‌کردن فونت‌ها و کش درست مرورگر. هر افزونه‌ای که روی همه‌ی صفحه‌ها فایل اضافه می‌کند، هزینه‌ای دارد که همه‌ی بازدیدکنندگان می‌پردازند.

  • قالب سبک انتخاب کنید؛ معیارهایش در انتخاب قالب وردپرس آمده است.
  • فونت فارسی را روی خود سایت و با قالب woff2 بارگذاری کنید و فقط وزن‌هایی را که استفاده می‌کنید نگه دارید.
  • تأخیر در اجرای جاوااسکریپت را با احتیاط فعال کنید و بعدش منو، فرم و سبد خرید را امتحان کنید.

کش مرورگر را اگر افزونه‌ی کش تنظیم نمی‌کند، در .htaccess اضافه کنید:

Apache
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>

اگر بعد از تغییر CSS، کاربران هنوز نسخه‌ی قدیمی را می‌بینند، کش مرورگر و نرسیدن CSS تازه را بخوانید.

دیتابیس و کارهای پس‌زمینه را چطور سبک کنیم؟#

با کم‌کردن تنظیمات سنگینی که در هر درخواست بارگذاری می‌شوند و اجرای کرون واقعی. Autoload یعنی تنظیمی که در هر بار اجرای وردپرس، بدون توجه به نیاز، از دیتابیس خوانده می‌شود. افزونه‌های حذف‌شده گاهی تنظیمات بزرگی با این ویژگی جا می‌گذارند. در phpMyAdmin این پرس‌وجو بزرگ‌ترین‌ها را نشان می‌دهد (اگر پیشوند جدول شما wp_ نیست، عوضش کنید):

SQL
SELECT option_name, LENGTH(option_value) AS bytes
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto-on', 'auto')
ORDER BY bytes DESC
LIMIT 20;

فقط تنظیمی را پاک کنید که مطمئنید به افزونه‌ی حذف‌شده تعلق دارد، و قبلش پشتیبان بگیرید. ابزارها ← سلامت سایت هم اگر حجم این تنظیمات زیاد باشد هشدار می‌دهد.

WP-Cron سازوکار کارهای زمان‌بندی‌شده‌ی وردپرس است که با هر بازدید بررسی می‌شود. روی سایت پربازدید بار اضافه می‌سازد و روی سایت کم‌بازدید دیر اجرا می‌شود. آن را در wp-config.php خاموش کنید:

PHP
define( 'DISABLE_WP_CRON', true );

و در بخش Cron Jobs سی‌پنل، مثلاً هر پانزده دقیقه، این دستور را بگذارید (نام کاربری و مسیر PHP را با هاست خودتان تطبیق دهید):

Bash
/usr/local/bin/php /home/USERNAME/public_html/wp-cron.php >/dev/null 2>&1

مسیر درست PHP روی هاست‌های مختلف فرق دارد؛ روش پیدا کردنش در کرون‌جاب سی‌پنل و مسیر PHP آمده است.

کش شیء کی به کار می‌آید؟#

وقتی سایت پویاست، مثلاً فروشگاه یا سایت عضویت، و هاست Redis یا Memcached می‌دهد. کش شیء نتیجه‌ی پرس‌وجوهای دیتابیس را در حافظه نگه می‌دارد تا تکرار نشوند. روی بیشتر هاست‌های اشتراکی در دسترس نیست؛ اگر هست، افزونه‌ی کش LiteSpeed یا افزونه‌ی مخصوص Redis می‌تواند به آن وصل شود.

سرعت وردپرس به کجا می‌رود#

جهت‌ها روشن‌اند: معیارهای تجربه‌ی کاربری گوگل، یعنی سرعت دیده‌شدن محتوا، واکنش به کلیک و ثبات چیدمان، معیار اصلی سنجش‌اند؛ هاست‌ها کش سطح سرور و پروتکل‌های تازه‌تر را پیش‌فرض می‌کنند و خود وردپرس در هر نسخه بهینه‌تر می‌شود. در عوض ابزارک‌های سنگین بیرونی، از چت آنلاین تا اسکریپت‌های تبلیغاتی، بیشتر شده‌اند و بار آن‌ها روی گوشی حس می‌شود.

برای آماده‌بودن:

  • عددهای پایه‌ی امروز را ثبت کنید تا اثر هر تغییر بعدی را ببینید.
  • هر اسکریپت بیرونی را پیش از افزودن بسنجید؛ اگر چت‌بات می‌خواهید، نسخه‌ای را انتخاب کنید که فقط بعد از کلیک بارگذاری شود. نکته‌هایش در چت‌بات پشتیبانی سایت وردپرسی آمده است.
  • هاستی بگیرید که کش سطح سرور و نسخه‌های تازه‌ی PHP دارد.

خلاصه#

  • اول زمان پاسخ سرور و حجم صفحه را جدا اندازه بگیرید.
  • یک افزونه‌ی کش، هماهنگ با وب‌سرور هاست؛ روی LiteSpeed افزونه‌ی خودش.
  • تصویر را در اندازه‌ی درست و با قالب WebP بارگذاری کنید.
  • تنظیمات autoload بزرگ را پیدا و با احتیاط پاک کنید.
  • WP-Cron را با کرون‌جاب واقعی سی‌پنل جایگزین کنید.