کش و بهینه سازی دیتابیس وردپرس

کش وردپرس

یکی از مباحث پرطرفدار در بین توسعه دهندگان وردپرس موضوع افزایش سرعت وردپرس است. کمتر وبلاگی در زمینه وردپرس پیدا می شود که به موضوع بهینه سازی و یا افزایش سرعت وردپرس نپرداخته باشد. اما اجازه دهید در این آموزش کمی با جزئیات بیشتری به این موضوع بپردازیم.

کش کردن در وردپرس

یکی از بخش های مهم در افزایش سرعت وردپرس کش کردن است. به لطف وجود پلاگین های کش وردپرس بصورت آماده و رایگان امکان استفاده از این قابلیت را آسانتر کرده. البته موضوع کش یکی از تکنیک های مهم در کم کردن مراجعات به دیتابیس است و در نهایت بهبود سرعت وردپرس را درپی دارد.

قبل از بررسی پلاگین های کش وردپرس، باید بدانید که در کل دو نوع کش وجود دارد: کش کردن سمت سرور و کش کردن سمت کلاینت (مرورگر کاربر)

کش کردن سمت کلاینت (Client-Side Caching)

کش کردن سمت کلاینت به معنی کش کردن داده ها با استفاده از مرورگر کاربر است. یعنی زمانی که کاربران سایت شما را بازدید می کنند، داده ها و بخش های مختلف از صفحه در مرورگر کاربر ذخیره می شوند. در حال حاضر اکثر مرورگر ها بطور خودکار این عملیات کش کردن را انجام می دهند، (مانند کش کردن فایل های JavaScript و CSS) البته می توان با تنظیمات دقیقتر هدر Expires در htaccess این کار را بهتر انجام داد.

تنظیمات هدر Expires  زیر بر اساس نوع فایل تقسیم بندی شده. کدهای زیر را در فایل htaccess قرار دهید:

# ------------------------------------------------------------------------------
# | Expires headers                                                            |
# ------------------------------------------------------------------------------

# Serve resources with far-future expires headers.

# IMPORTANT: If you don't control versioning with filename-based cache
# busting, consider lowering the cache times to something like one week.

<IfModule mod_expires.c>

    ExpiresActive on
    ExpiresDefault                                      "access plus 1 month"

  # CSS
    ExpiresByType text/css                              "access plus 1 year"

  # Data interchange
    ExpiresByType application/json                      "access plus 0 seconds"
    ExpiresByType application/ld+json                   "access plus 0 seconds"
    ExpiresByType application/vnd.geo+json              "access plus 0 seconds"
    ExpiresByType application/xml                       "access plus 0 seconds"
    ExpiresByType text/xml                              "access plus 0 seconds"

  # Favicon (cannot be renamed!) and cursor images
    ExpiresByType image/x-icon                          "access plus 1 week"

  # HTML components (HTCs)
    ExpiresByType text/x-component                      "access plus 1 month"

  # HTML
    ExpiresByType text/html                             "access plus 0 seconds"

  # JavaScript
    ExpiresByType application/javascript                "access plus 1 year"

  # Manifest files
    ExpiresByType application/manifest+json             "access plus 1 year"
    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
    ExpiresByType text/cache-manifest                   "access plus 0 seconds"

  # Media
    ExpiresByType audio/ogg                             "access plus 1 month"
    ExpiresByType image/gif                             "access plus 1 month"
    ExpiresByType image/jpeg                            "access plus 1 month"
    ExpiresByType image/png                             "access plus 1 month"
    ExpiresByType video/mp4                             "access plus 1 month"
    ExpiresByType video/ogg                             "access plus 1 month"
    ExpiresByType video/webm                            "access plus 1 month"

  # Web feeds
    ExpiresByType application/atom+xml                  "access plus 1 hour"
    ExpiresByType application/rss+xml                   "access plus 1 hour"

  # Web fonts
    ExpiresByType application/font-woff                 "access plus 1 month"
    ExpiresByType application/font-woff2                "access plus 1 month"
    ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
    ExpiresByType application/x-font-ttf                "access plus 1 month"
    ExpiresByType font/opentype                         "access plus 1 month"
    ExpiresByType image/svg+xml                         "access plus 1 month"

</IfModule>

کش کردن سمت سرور (Server-Side Caching)

کش کردن سمت سرور انواع مختلفی دارد:

  • کش کردن صفحه (Page Caching): زمانی که وردپرس در حال پاسخ به درخواست یک صفحه مورد نظر است، بخش های مختلف صفحه که در دیتابیس ذخیره شده را از دیتابیس واکشی می کند، سپس داده ها در جای خود قرار گرفته و بعنوان خروجی ارسال می کند. عملیات کش کردن صفحه به اینصورت است که قبل از ارسال خروجی یک نمونه از آن بر روی هارد دیسک بصورت فایل HTML و یا در RAM ذخیره می شود، تا در درخواست های بعدی بجای مراجعه به دیتابیس فایل HTML ایجاد شده را بطور مستقیم بعنوان خروجی ارسال می شود.
  • کش کردن دیتابیس (Database Caching): دیتابیس در وردپرس نقش "مغز" آن را دارد چون تمام داده ها در آن ذخیره می شوند. کش دیتابیس وردپرس کمک می کند که مراجعات به دیتابیس کم شده و از اجرای پرس و جو های تکراری بر اساس هر درخواست کاربر جلوگیری کند.
  • کش کردن شیء (Object Caching): یک API داخلی وردپرس است که این امکان را برای پلاگین ها فراهم می سازد که پرس و جوهای سنگین را در memory ذخیره کنند.
  • کش کد های کامپایل شده (Opcode Caching): در هر درخواستی که ما برای یک فایل php ارسال می کنیم، ابتدا کدهای نوشته شده ما کامپایل شده و به سطح پایین تری تبدیل و اجرا  شده و خروجی ارسال می شود. کش Opcode بمعنی ذخیره کدهای کامپایل شده است. تا روند کامپایل مجددا انجام نشود.

پلاگین های کش وردپرس

  • WP Super Cache: یک پلاگین معروف و محبوب کش وردپرس است که بیش از 6 میلیون دانلود شده. این پلاگین با ذخیره یک نسخه HTML صفحات آنها را تا مدت زمانی که ما تعیین نگهداری کرده و در درخواست های بعدی بجای مراجعه به صفحه اصلی به نسخه HTML آن مراجعه کرده و برای خروجی ارسال می کند. این پلاگین برای هاست های اشتراکی مناسب است.
  • W3 Total Cache: پلاگین دوم محبوب کش وردپرس است که مناسب سایتهای پر بازدید است.

بهینه سازی دیتابیس وردپرس

دیتابیس "مغز" وب سایت شماست. زیرا دادهای با ارزشی را برای نمایش در صفحات در خود ذخیره کرده است. سیستم های مدیریت محتوا از انواع دیتابیس ها بری ذخیره داده ها استفاده می کنند مانند (SQL, NoSQL, XML, JSON و ...) سیستم مدیریت محتوای وردپرس هم از دیتابیس MySql برای ذخیره داده ها از جمله مشخصات سایت، تنظیمات پروفایل کاربر و ... استفاده می کند.

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

شما باید همیشه مواظب بخش های مختلف مانند صفحات، رونوشت ها، نظرات، پست ها و ... باشید. بطور خلاصه باید مواظب سربار دیتابیس باشید. این کار را معمولا شبیه defragmentation هارد دیسک و یا تعویض روغن ماشین دانست.

تمامی موارد فوق را شما می توانید بصورت دستی هم انجام دهید: خالی کردن سطل آشغال، غیرفعال کردن ثبت نسخه های رونوشت پست ها، حذف نظرات اسپم و بهینه سازی دیتابیس از طریق phpmyadmin است. اما شما میتوانید بجای انجام تمامی این کارها بصورت دستی از یک پلاگین وردپرس برای اینکار استفاده کنید.

یکی از پلاگین های بسیار خوب برای انجام این کار WP-Optimize است. 

امکانات برجسته پلاگین WP-Optimize:

  • حذف نسخه های قدیمی رونوشت پست ها
  • حذف نظرات قدیمی تایید نشده و اسپم
  • حذف نظرات موجود در سطل اشغال
  • حذف متای دیتای  Akismet از نظرات
  • حذف متای دیتای بدرد نخود از نظرات
  • بهینه سازی سایت برای موبایل
  • حذف تمام trackbacks و pingbacks
  • پاکسازی پست های  پیشنویس خودکار 
  • حذف transient options
  • حذف پست های موجود در سطل آشغال
  • امکان زمان بندی کارهای بهینه سازی



بومیم