آموزش رایگان وردپرس، سئو ، طراحی سایت و اخبار روز تکنولوژی
ارتباط

ترفندهای پنهان دیتابیس وردپرس: کلید سرعت و پایداری سایت شما

رفقا، تا حالا به این فکر کردین که چرا سایت وردپرسی‌تون گاهی اوقات نفسش میگیره و کند میشه؟ خیلی وقت‌ها مشکل توی ظاهر سایت نیست، بلکه توی لایه‌های زیرین و قلب تپنده‌ی وردپرس، یعنی دیتابیسه. امروز می‌خوایم یه سفر عمیق به این لایه‌ها داشته باشیم و با چند تا ترفند حسابی، سرعت سایتتون رو سر و سامون بدیم.

نویسنده سایت آموز
تاریخ انتشار 1404 دی 15
زمان مطالعه 3 دقیقه
بازدید 95
ترفندهای پنهان دیتابیس وردپرس: کلید سرعت و پایداری سایت شما

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

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

ترفندهای کاربردی برای بهینه‌سازی کوئری‌ها (Queries) در وردپرس

اصل ماجرا اینجاست، بچه‌ها حواستون باشه! بیشتر کندی‌های سایت وردپرسی، ریشه در کوئری‌های ناکارآمد دیتابیس داره. وردپرس به صورت پیش‌فرض کارهای زیادی رو برای راحتی ما انجام میده، اما گاهی اوقات این راحتی به قیمت پرفورمنس تموم میشه.

استفاده هوشمندانه از Transients: کشِ دیتابیس شما

یکی از قلق‌های خاصیه که خیلی از توسعه‌دهنده‌ها بهش بی‌توجهی می‌کنن، استفاده از Transientsهاست. Transients به شما اجازه میده نتایج کوئری‌های پیچیده، فراخوانی‌های API یا هر عملیات زمان‌بر دیگه رو برای یه مدت مشخص کش (cache) کنید. این یعنی به جای اینکه هر بار که صفحه لود میشه، دیتابیس رو با یه کوئری سنگین درگیر کنید، نتیجه رو از کش بخونید.


function get_custom_data_with_cache() {
 $data = get_transient( 'my_custom_expensive_data' );

 if ( false === $data ) {
 // این بخش فقط زمانی اجرا میشه که کش وجود نداشته باشه یا منقضی شده باشه
 // اینجا می‌تونه یه کوئری پیچیده، فراخوانی API، یا محاسبه سنگین باشه
 $data = perform_expensive_computation(); 
 set_transient( 'my_custom_expensive_data', $data, HOUR_IN_SECONDS * 12 ); // کش برای 12 ساعت

 // تجربه شخصی من میگه: همیشه برای Transients یه زمان انقضا منطقی بذارید. 
 // نه اونقدر کوتاه که بی‌فایده بشه، نه اونقدر طولانی که اطلاعات قدیمی بمونه.
 }
 return $data;
}

function perform_expensive_computation() {
 // فرض کنید اینجا یه عملیات سنگین انجام میشه
 // مثلاً: 
 // global $wpdb;
 // $results = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} WHERE post_type = 'product' AND post_status = 'publish' ORDER BY RAND() LIMIT 10" );
 // return $results;
 return "This is some expensive data!";
}

// حالا هرجا خواستید این داده رو استفاده کنید:
$my_data = get_custom_data_with_cache();
echo $my_data;

توی این ۱۳ سالی که با سیستم‌های مختلف جنگیدم تا پرفورمنس رو بالا ببرم، دیدم که Transients چقدر میتونه ناجی باشه، خصوصاً وقتی با دیتابیس‌های بزرگ یا APIهای بیرونی سروکار داریم.

بهینه‌سازی WP_Query: دقیقاً چیزی که می‌خواید رو بخونید

وقتی از WP_Query برای واکشی پست‌ها یا کاستوم پست‌تایپ‌ها استفاده می‌کنید، وردپرس به صورت پیش‌فرض کارهای زیادی انجام میده که ممکنه نیاز نداشته باشید. با تنظیم دقیق آرگومان‌ها، می‌تونید بار روی دیتابیس رو به شدت کم کنید.

  • fields: اگه فقط به ID پست‌ها نیاز دارید، 'fields' => 'ids' رو تنظیم کنید. اینجوری وردپرس کل شیء پست رو واکشی نمیکنه.
  • no_found_rows: اگه نیازی به Pagination (صفحه‌بندی) یا تعداد کل نتایج (برای مثلاً $query->found_posts) ندارید، 'no_found_rows' => true رو بذارید. این کار باعث میشه وردپرس یه کوئری SQL_CALC_FOUND_ROWS اضافی اجرا نکنه.
  • update_post_meta_cache و update_post_term_cache: اگه نیازی به متا دیتا یا ترم‌های (دسته‌بندی‌ها/تگ‌ها) پست‌ها ندارید، این دو رو روی false تنظیم کنید.

$args = array(
 'post_type' => 'post',
 'posts_per_page' => 5,
 'orderby' => 'date',
 'order' => 'DESC',
 'no_found_rows' => true, // این از کوئری SQL_CALC_FOUND_ROWS جلوگیری می‌کنه
 'update_post_meta_cache' => false, // متاهای پست رو واکشی نمیکنه
 'update_post_term_cache' => false // ترم‌های پست رو واکشی نمیکنه
);

$optimized_query = new WP_Query( $args );

if ( $optimized_query->have_posts() ) :
 while ( $optimized_query->have_posts() ) : $optimized_query->the_post();
 // کار با پست‌ها
 the_title();
 endwhile;
 wp_reset_postdata();
endif;

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

بهینه‌سازی جدول wp_options: قاتل پنهان سرعت

توی لایه زیرین کدا، جدول wp_options یکی از پرکاربردترین و در عین حال مستعدترین جاها برای کندی سایته. خیلی از افزونه‌ها و قالب‌ها، اطلاعاتشون رو اینجا ذخیره می‌کنن و متاسفانه بعضی‌هاشون گزینه‌های بی‌شماری رو با 'autoload' => 'yes' ذخیره می‌کنن. این یعنی هر بار که یه صفحه لود میشه، کلی داده غیرضروری هم از دیتابیس خونده میشه.

برای اینکه بفهمید چه گزینه‌هایی با autoload زیاد دارن، می‌تونید از این کوئری SQL استفاده کنید (حتماً قبلش از دیتابیس بکاپ بگیرید!):


SELECT option_name, LENGTH(option_value) AS option_value_length
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_value_length DESC
LIMIT 20;

بعد از شناسایی گزینه‌های بزرگ و غیرضروری، می‌تونید با کدنویسی (با استفاده از delete_option()) یا حتی دستی (فقط اگر می‌دانید چه کار می‌کنید!) آن‌ها را حذف کنید یا autoload آن‌ها را به no تغییر دهید. این اون قلق خاصیه که معمولاً کمتر کسی سراغش میره، اما تاثیرش معجزه می‌کنه.

پاکسازی دیتابیس: نظم دادن به آشفتگی‌ها

همراهان عزیز، دیتابیس وردپرس به مرور زمان پر میشه از اطلاعات اضافی که دیگه بهشون نیازی نیست. این آشغال‌ها می‌تونن شامل موارد زیر باشن:

  • بازنگری‌های پست (Post Revisions): هر بار که پستی رو ویرایش می‌کنید، وردپرس یه نسخه ازش رو ذخیره میکنه. اگه تعداد ویرایش‌ها زیاد باشه، دیتابیس خیلی حجیم میشه.
    • راهکار: می‌تونید با اضافه کردن کد زیر به فایل wp-config.php، تعداد بازنگری‌ها رو محدود کنید یا کلاً غیرفعال کنید:
      define( 'WP_POST_REVISIONS', 3 ); // فقط 3 بازنگری آخر رو نگه میداره
      // یا برای غیرفعال کردن کامل:
      // define( 'WP_POST_REVISIONS', false );
  • دیدگاه‌های اسپم و حذف شده (Spam & Trashed Comments): کامنت‌های اسپم و اونایی که به سطل زباله فرستادید، تا وقتی که دستی پاکشون نکنید، توی دیتابیس باقی میمونن.
  • Transientsهای منقضی شده: اگه با Transients کار می‌کنید و سیستم کشی دیگه ندارید، ممکنه کلی Transient منقضی شده توی دیتابیس بمونه. وردپرس خودش اونا رو پاک میکنه، اما گاهی اوقات یه دستی کشیدن لازمه.
  • متا دیتاهای یتیم (Orphaned Meta Data): وقتی پستی رو حذف می‌کنید، ممکنه متا دیتاهای مربوط به اون پست (مثل post_meta یا comment_meta) توی دیتابیس باقی بمونن.

برای پاکسازی این موارد، می‌تونید از افزونه‌های معتبر بهینه‌سازی دیتابیس استفاده کنید (مثل WP-Optimize) یا برای موارد خاص، کوئری‌های SQL بنویسید (با نهایت دقت و بعد از بکاپ!).

برای اینکه سرعت و بهینه‌سازی سایتتون رو به حداکثر برسونید، خوندن این مطالب رو از دست ندید:

حرف آخر

لپ مطلب اینه که سرعت سایت فقط به هاست و CDN محدود نمیشه. یه بخش بزرگی از اون توی نحوه تعامل سایت شما با دیتابیس نهفته‌ست. با به کارگیری همین ترفندهای به ظاهر ساده، اما عمیق و کدنویسی شده، می‌تونید تفاوت چشمگیری در پرفورمنس سایت وردپرسی‌تون ایجاد کنید. پس رفقا، وقتشه دست به آچار بشید و دیتابیس رو بهینه‌سازی کنید!

اشتراک‌گذاری مقاله

درباره نویسنده

A

آقا کوچولو

توسعه‌دهنده وب و نویسنده محتوا با بیش از 13 سال تجربه در زمینه وردپرس و طراحی وب‌سایت. علاقه‌مند به آموزش و انتقال تجربیات به دیگران.

نظرات (0)

دیدگاه خود را بنویسید

کد امنیتی