بهبود عملکرد وردپرس با پاکسازی جدول wp_options و داده های Autoloaded

معرفی جدول wp_options

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

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

بنابراین اگر:

  1. مدام در حال تست افزونه های مختلف هستید.
  2. حواستان به جدول wp_options نیست.
  3. مدت طولانی است که وب سایت تان را راه اندازی کرده اید.
  4. توسعه دهنده قالب یا پلاگین هستید.
  5. به مباحث بهینه سازی علاقمندید.

حتما تا انتهای این آموزش با ما همراه باشید.

توجه داشته باشید که در این آموزش فرض کردیم پیشوند جداول وردپرس همان مقدار پیش فرض یعنی “_wp” است.

جدول wp_options چیست؟

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

  • آدرس سایت، ایمیل مدیریت، طبقه پیش فرض، تعداد پست های هر صفحه(Posts Per Page)، فرمت زمان، افزونه های فعال و …
  • تنظیمات ابزارک ها و افزونه ها
  • داده های موقت(Temporarily Cached Data)

همانطور که در مطلب آموزشی آشنایی با ساختار جداول در دیتابیس وردپرس اشاره کردیم جدول wp_options از چهار فیلد option_id، option_name، option_value و autoload تشکیل شده است.

فیلد autoload در جدول wp_options

 

تنها نکته حائز اهمیت جدول فوق فیلد autoload است که به منظور نگهداری مقدار yes یا no استفاده می شود. در ادامه برای درک بهتر موضوع با ذکر چند پرسش وارد جزئیات می شویم:

۱- منظور از داده های Autoloaded چیست؟

داده های Autoloaded داده هایی هستند که وردپرس به صورت خودکار در تک تک صفحات وب سایت فراخوانی و لود می کند، این مکانیزم به کمک تابع  wp_load_alloptions پیاده سازی می شود.

کد زیر کلیه تنظیماتی که مقدار فیلد autoload آنها yes است را در خروجی نشان می دهد.

<?php
    $all_options = wp_load_alloptions();
    echo '<pre>';
    print_r( $all_options );
    echo '</pre>';
?>

 

۲- yes بودن Autoload به چه معناست؟

مقدار yes را به عنوان چراغ سبزی در نظر بگیرید که به وردپرس می گوید: لطفا این تنظیم را به صورت خودکار در تمام صفحات بارگذاری کن!

۳- آیا مقدار Autoload باید همیشه yes باشد؟

مطمئنا خیر، مقدار yes یا no بر اساس نیاز پروژه تعیین می شود، به عنوان مثال آیا لازم است تنظیمات افزونه Contact Form 7 در کلیه صفحات فراخوانی گردد یا فقط در صفحه تماس با ما به آن نیاز است؟

۴- عمق فاجعه کجاست؟

زمانی است که یک پلاگین یا قالب تنظیمات خود را به صورت پیش فرض و همیشگی با مقدار “yes” ذخیره کند، بدتر آنکه در فرآیند حذف هم هیچگونه راهکاری برای پاکسازی آنها در نظر نگرفته است، به عبارت دیگر پلاگین و قالب حذف شده است اما تنظیماتش همچنان در جدول wp_options وجود دارد.

حجم داده های Autoloaded چقدر باشد؟

هر چقدر رکوردهای بیشتری با مقدار yes به جدول wp_options اضافه گردد به همان اندازه هم به حجم داده های Autoloaded افزوده خواهد شد، این یعنی وردپرس باید این سربار داده ای را تحمل کرده و هر طور شده آنها را فراخوانی کند.

چه موقع این حجم می تواند مشکل ساز باشد؟

مطمئنا حجم Autoloaded در هر وب سایتی متفاوت خواهد بود، اما بهتر است از راهنمای زیر به عنوان یک چوب خط استفاده نمائید:

  • تا ۸۰۰ کیلوبایت (۰٫۸MB): حالت بهینه، همه چیز خوب است!
  • از ۸۰۰ کیلوبایت تا ۱ مگابایت: مراقب باشید، به منطقه خطر نزدیک می شوید.
  • از ۱ تا ۵ مگابایت: زنگ خطر، بهینه سازی را شروع کنید و برخی رکوردهای Autoloaded را حذف یا از yes به no تغییر دهید.
  • ۵ تا ۱۰ مگابایت و بیشتر: فاجعه!!

اما جدای از موارد بالا همیشه سعی کنید:

  • افزونه های بلااستفاده و داده های مرتبط با آنها را حذف نمائید.
  • ابتدا نیازتان را بدون افزونه رفع کنید، اگر راهکاری در وردپرس ارائه نشده بود آنگاه به دنبال نصب افزونه باشید.
  • پلاگین ها را در سرور آزمایشی تست و بررسی نمائید.
  • برای هر کار کوچکی از افزونه استفاده نکنید.

چگونه حجم داده های Autoloaded را محاسبه کنیم؟

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

برای این منظور مراحل زیر را دنبال کنید:

  1. با حساب کاربری خود وارد phpMyAdmin شوید.
  2. از لیست سمت چپ بر روی دیتابیس وردپرس کلیک کنید.
  3. وارد تب SQL شوید و کوئری زیر را در این قسمت قرار دهید.
  4. Go فراموش نشود.
SELECT ( CASE WHEN SUM( LENGTH ( option_value ) ) < 1000000 
        
             THEN 
                   CONCAT( CEILING( SUM( LENGTH ( option_value ) ) / 1024.0 ), 'KB' )
             ELSE 
                   CONCAT( FORMAT( SUM( LENGTH ( option_value ) ) / 1048576.0, 'N3' ), 'MB' ) 
        
             END ) AS autoload_data_size
              
FROM wp_options WHERE autoload='yes'

 

تابع length حجم داده ها را به بایت بر می گرداند، برای راحتی آن را به کیلوبایت و مگابایت تبدیل کردیم.

اگر پیشوند جداول شما چیزی به غیر از “_wp” است، نام جدول را در اسکریپت فوق اصلاح کنید.

محاسبه حجم داده های autoloaded

 

پس از اجرای کوئری خروجی نهایی بدین صورت خواهد بود، در دیتابیس مورد بررسی مجموع حجم داده های Autoloaded چیزی در حدود ۲MB است. اگر حجم داده های شما زیر ۱MB است جای نگرانی نیست، اما اگر بیشتر از این مقدار هستید باید وارد فاز شناسایی شوید.

حجم داده های autoloaded

 

در مرحله بعد رکوردهایی که بیشترین فضا را اشغال کرده اند شناسایی می کنیم، کوئری زیر اینکار را برای شما انجام می دهد.

SELECT option_name, ( CASE WHEN LENGTH ( option_value )  < 1000000 
        
             THEN 
                   CONCAT( CEILING ( LENGTH ( option_value )  / 1024.0 ), 'KB' )
             ELSE 
                   CONCAT( FORMAT ( LENGTH ( option_value )  / 1048576.0, 'N3' ), 'MB' ) 
        
             END) AS autoload_data_size
              
FROM wp_options WHERE autoload='yes' ORDER BY LENGTH ( option_value ) DESC

 

خروجی این اسکریپت رکوردها را بر اساس حجم option_value از بزرگ به کوچک لیست می کند، حالا بهتر می توانید عوامل مشکل ساز را شناسایی کنید.

حجم داده های ستون option_value

 

همانطور که در تصویر ملاحظه می کنید “rs-templates” مربوط به افزونه Slider Revolution است، این تنظیم فضایی در حدود ۶۲۷ کیلوبایت اشغال کرده است که برای یک افزونه مقدار زیادی است.

حالا باید به این پرسش پاسخ دهید؟

اگر مقدار ستون autoload این تنظیم به ‘no’ تغییر پیدا کند آیا افزونه با مشکل مواجه خواهد شد یا خیر؟ برای پاسخ به این سوال بهتر است در یک سرور آزمایشی تست و بررسی های خود را انجام دهید و در صورت صحت عملکرد نتیجه را به سرور اصلی منتقل نمائید، همچنین اگر مستندات توسعه دهنده افزونه در دسترس است آنها را هم مطالعه کنید.

برای تغییر مقدار yes به no می توانید از اسکریپت زیر استفاده نمائید.

UPDATE wp_options SET autoload='no' WHERE option_name='rs-templates';

 

این فرآیند بسته به نوع افزونه متفاوت خواهد بود، به عنوان مثال افزونه Ultimate Member داده های کش شده کاربران را در جدول wp_options  نگهداری می کند، از طرفی به شما این قابلیت را می دهد که از بخش تنظیمات افزونه کش را پاکسازی کرده یا کاملا غیرفعال نمائید.

پاکسازی داده های Transient(گذرا، موقت)

در تصویر بالا مواردی را مشاهده می کنید که با _transient_ شروع شده اند، اینها رکوردهایی هستند که به صورت موقت در جدول wp_options ذخیره شده اند و دارای تاریح انقضاء هستند، یعنی پس از اتمام یک بازه زمانی از بین خواهند رفت.

هر چند ممکن است این مکانیزم به درستی عمل نکند و پس از اتمام تاریخ انقضاء رکوردهایی را مشاهده کنید که همچنان در دیتابیس وجود دارند، معمولا توسعه دهندگان از Transients API برای افزایش سرعت برنامه های خود استفاده می کنند اما اینکار بعضی مواقع نتیجه معکوس می دهد.

با این حال بهتر است جانب احتیاط را رعایت کنید و برای حذف داده هایی که تاریخ انقضاء آنها به سر رسیده است از افزونه های Transients Manager و Transient Cleaner استفاده کنید.

کوئری زیر لیست Transient هایی که مقدار autoload آنها yes است را گزارش می دهد.

SELECT * FROM wp_options WHERE autoload = 'yes' AND option_name LIKE '%\_transient\_%'

 

افزودن ایندکس به جدول wp_options

در نهایت اگر به دنبال بهینه سازی بیشتری هستید می توانید با کوئری زیر بر روی فیلد autoload ایندکس گذاری کنید. اینکار سرعت اجرای کوئری های که بر روی جدول wp_options اعمال می شوند را افزایش می دهد.

ALTER TABLE wp_options ADD INDEX (`autoload`);

 

جمع بندی

احتمالا پس از اتمام این آموزش با دقت بیشتری پلاگین های مدنظرتان را انتخاب خواهید کرد، چرا که در مارکت وردپرس افزونه های غیر استاندارد زیادی وجود دارد که حتی ساده ترین مسائل را رعایت نکرده اند. با این تفاسیر هر چه افزونه های بیشتری نصب کنید به همان اندازه هم وب سایت کندتر و البته wp_options حجیم تری خواهید داشت.

در پایان امیدواریم این مطلب آموزشی برای شما مفید بود باشد.

برچسب ها
سعید یاورنیا 117 نوشته 117 دیدگاه

توسعه دهنده وب، کارشناس ارشد نرم افزار.

دیدگاه ‌ها

  • امین ۲۸ اردیبهشت ۱۳۹۹ - ۰۰:۲۰

    سلام اگر Autoloaded را رویnoقرار دهیم چگونه در صفحات مختلف در دسترس داشته باشیم

    • سعید یاورنیا ۲۸ اردیبهشت ۱۳۹۹ - ۰۹:۳۸

      سلام دوست عزیز.
      داده های شما چه autoloaded باشه چه نباشه در هر صورت برای بازیابی اونها در صفحات مختلف باید از تابع get_option استفاده کنید، کافیه نام آپشن رو به این تابع ارسال کنید.
      توجه داشته باشید که get_option به صورت خودکار وضعیت autoloaded بودن آپشن رو بررسی می کنه.

دیدگاهتان را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد، بخش‌های موردنیاز با * مشخص شده‌اند.