اگه سایت وردپرسی دارید و از کندی سرعتش خسته شدید، این مقاله براتونه. میخوام در مورد یه ترفند صحبت کنم که خیلیا نمیدونن ولی میتونه سرعت سایت رو چند برابر کنه: Object Cache.
شاید اسمش ترسناک به نظر برسه، ولی نگران نباشید. قراره خیلی ساده توضیح بدم که Object Cache چیه، چطور کار میکنه، چطور فعالش کنید و چه فرقی با Page Cache داره. تا انتها همراه باشید.
اول بذارید یه مشکل رو توضیح بدم
وردپرس برای نمایش هر صفحه، کلی Query به دیتابیس میزنه. مثلاً برای نمایش صفحه اصلی یه سایت معمولی:
- اطلاعات تنظیمات سایت رو بخونه
- لیست پستها رو بگیره
- اطلاعات نویسنده هر پست
- دستهبندیها و تگها
- منوها
- ویجتها
- اطلاعات افزونهها
- تنظیمات تم
میدونید چند تا Query میشه؟ توی یه سایت معمولی، ممکنه ۵۰ تا ۲۰۰ Query برای یه صفحه زده بشه! حالا فرض کنید ۱۰۰ نفر همزمان سایت رو ببینن. یعنی ۲۰,۰۰۰ Query به دیتابیس! دیتابیس له میشه و سایت کند میشه.
بدتر از این: خیلی از این Query ها برای همه کاربرا یکسان هستن. مثلاً اطلاعات منو برای همه یکیه. پس چرا هر بار دوباره از دیتابیس میخونیم؟
Object Cache چطور این مشکل رو حل میکنه؟
ایده سادهست: بجای اینکه هر بار همون اطلاعات رو از دیتابیس بخونیم، یه بار میخونیم و توی یه جای سریعتر نگه میداریم. این "جای سریعتر" همون Cache هست.
وردپرس خودش یه سیستم Object Cache داره، ولی مشکلش اینه که اطلاعات رو توی RAM همون درخواست نگه میداره. یعنی وقتی کاربر بعدی میاد، دوباره باید همه چیز رو از دیتابیس بخونه. این Cache فقط برای یه Page Load مفیده.
با یه Persistent Object Cache (مثل Redis یا Memcached)، اطلاعات توی یه سرور Cache میمونه و همه درخواستها میتونن ازش استفاده کنن. اطلاعات منو یه بار خونده میشه و ساعتها در دسترسه.
تفاوت Object Cache با Page Cache
یه سوال رایج: "من که افزونه کش دارم، چرا Object Cache لازمه؟"
فرق اساسی هست:
Page Cache: کل صفحه HTML رو ذخیره میکنه. عالیه برای کاربرای مهمان که همه یه چیز میبینن. سریعترین نوع کش ممکنه چون PHP اصلاً اجرا نمیشه.
Object Cache: دادههای خام دیتابیس رو ذخیره میکنه. برای صفحاتی که نمیشه کش کرد (مثل پنل کاربری، سبد خرید) فوقالعادهست.
مثال: توی فروشگاه اینترنتی، هر کاربر سبد خرید متفاوتی داره. Page Cache کار نمیکنه چون هر کاربر صفحه متفاوتی میبینه. ولی Object Cache میتونه اطلاعات محصولات رو کش کنه که برای همه یکیه - حتی وقتی صفحه نمیتونه کامل کش بشه.
کِی هر کدام مناسبه؟
- Page Cache: صفحه اصلی، بلاگ، صفحات محصول برای کاربر مهمان
- Object Cache: داشبورد، سبد خرید، پنل کاربری، صفحاتی با محتوای شخصیسازیشده
- هر دو: بهترین حالت برای فروشگاههای بزرگ
Object Cache چطور کار میکنه؟
وقتی وردپرس میخواد یه Query به دیتابیس بزنه، اول توی Object Cache چک میکنه:
- اگه داده توی Cache بود، مستقیم برمیگردونه (خیلی سریع)
- اگه توی Cache نبود، از دیتابیس میخونه
- نتیجه رو توی Cache ذخیره میکنه برای دفعات بعدی
این فرایند به طور خودکار توسط وردپرس مدیریت میشه. شما فقط Object Cache رو فعال میکنید و وردپرس بقیه کارها رو میکنه.
Redis vs Memcached برای Object Cache وردپرس
دو گزینه اصلی برای Persistent Object Cache هستن:
| ویژگی | Redis | Memcached |
|---|---|---|
| سرعت | بالا | بالا |
| ساختار داده | متنوع | فقط String |
| پایداری | بله (اختیاری) | خیر |
| پشتیبانی وردپرس | عالی | خوب |
| توصیه | اول | دوم |
برای وردپرس، Redis معمولاً انتخاب بهتریه. افزونههای بیشتری داره، پشتیبانی بهتری داره و قابلیتهای بیشتری ارائه میده.
چطور Object Cache رو فعال کنیم؟
قدم ۱: بررسی هاست
اول باید مطمئن بشید هاست شما Redis یا Memcached داره. از پشتیبانی بپرسید یا توی مشخصات پلن چک کنید. بعضی هاستها این سرویس رو به عنوان add-on ارائه میدن.
قدم ۲: نصب افزونه
اگه Redis دارید، افزونه Redis Object Cache (نوشته Till Krüss) رو از مخزن وردپرس نصب کنید. اگه از LiteSpeed استفاده میکنید، افزونه LiteSpeed Cache هم قابلیت Object Cache داره.
قدم ۳: تنظیمات wp-config.php
این خط رو به فایل wp-config.php اضافه کنید (قبل از خط /* That's all, stop editing! */):
define('WP_CACHE', true);
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
قدم ۴: فعالسازی
برید به Settings > Redis در پنل وردپرس و دکمه Enable Object Cache رو بزنید. وضعیت باید به "Connected" تغییر کنه و Hit Rate (درصد Cache Hit) رو نشون بده.
قدم ۵: تست با Query Monitor
افزونه Query Monitor رو نصب کنید و ببینید تعداد Query ها چقدر کم شده. همچنین میتونید ببینید چند درصد از Object Cache جواب گرفتن.
نتایج واقعی
یه سایت فروشگاهی با WooCommerce تست کردیم:
قبل از Object Cache:
- Query های دیتابیس: ۱۸۷
- زمان Query: ۰.۸۵ ثانیه
- زمان کل صفحه: ۲.۳ ثانیه
بعد از Object Cache (Redis):
- Query های دیتابیس: ۲۳
- زمان Query: ۰.۰۹ ثانیه
- زمان کل صفحه: ۰.۷ ثانیه
میبینید؟ Query ها از ۱۸۷ به ۲۳ رسید! سرعت بیش از سه برابر شد. این یه تفاوت واقعیه که کاربر حسش میکنه.
Object Cache و WooCommerce
WooCommerce از وردپرس معمولی بار بیشتری روی دیتابیس میذاره. هر صفحه محصول، چندین Query برای قیمت، موجودی، نظرات، محصولات مرتبط و... نیاز داره. Object Cache اینجا خیلی تاثیر داره:
- اطلاعات محصولات کش میشه
- قیمتها و تخفیفها کش میشه
- تنظیمات WooCommerce کش میشه
- اطلاعات shipping و... کش میشه
فقط سبد خرید و checkout که برای هر کاربر منحصربهفرده کش نمیشه - که درسته.
نکات مهم و بهترین شیوهها
۱. همیشه بکاپ بگیرید
قبل از هر تغییری، یه بکاپ کامل از فایلها و دیتابیس بگیرید. اگه مشکلی پیش اومد، برگردید به حالت قبل.
۲. تست کنید
بعد از فعالسازی، همه بخشهای سایت رو تست کنید. مخصوصاً صفحه سبد خرید، پنل کاربری، و فرآیند پرداخت.
۳. با افزونه کش ترکیب کنید
Object Cache و Page Cache مکمل همن. هر دو رو استفاده کنید تا بهترین نتیجه رو بگیرید.
۴. TTL مناسب تنظیم کنید
زمان انقضای کش رو با توجه به محتوای سایتتون تنظیم کنید. اگه محتوا خیلی تغییر میکنه، TTL کوتاهتری انتخاب کنید.
۵. مانیتور کنید
گاهی چک کنید که Cache درست کار میکنه. افزونه Redis Object Cache یه صفحه داشبورد داره که Hit Rate و آمار نشون میده. Hit Rate بالای ۸۰٪ خوبه.
مشکلات رایج و راهحل
سایت خراب شد!
افزونه رو غیرفعال کنید. اگه به پنل وردپرس دسترسی ندارید، فایل wp-content/object-cache.php رو از طریق FTP پاک کنید. سایت به حالت عادی برمیگرده.
تغییرات نشون داده نمیشه
کش رو Flush کنید. توی داشبورد Redis Object Cache، دکمه Flush Cache هست. همچنین میتونید از redis-cli FLUSHALL استفاده کنید.
خطای اتصال به Redis
مطمئن بشید Redis روی سرور نصب و فعاله. با دستور redis-cli ping چک کنید. باید جواب PONG بده. اگه نداد، با پشتیبانی هاست تماس بگیرید.
Hit Rate پایینه
اگه Hit Rate کمتر از ۵۰٪ هست، ممکنه TTL خیلی کوتاه باشه یا محتوای سایت خیلی داینامیک باشه. تنظیمات رو بررسی کنید.
سوالات متداول
آیا Object Cache برای همه سایتهای وردپرسی لازمه؟
نه، برای همه لازم نیست. اگه سایت سادهای دارید با ترافیک کم، Page Cache کافیه. Object Cache بیشتر برای سایتهای پر بازدید، فروشگاههای بزرگ، و سایتهایی که صفحات داینامیک زیاد دارن ارزش داره.
Object Cache جایگزین Page Cache میشه؟
خیر، این دو مکمل همن. Object Cache دادههای خام رو کش میکنه، Page Cache HTML نهایی رو. بهترین نتیجه با استفاده از هر دو بدست میاد.
آیا Object Cache با Multisite وردپرس کار میکنه؟
بله، Redis Object Cache با وردپرس Multisite سازگاره. هر سایت توی Network کلیدهای جداگانهای در Redis داره.
وقتی پلاگین نصب یا آپدیت میکنم، چطور کش پاک میشه؟
وردپرس خودش بعضی رویدادها مثل آپدیت پست یا پاک کردن ترنزیت رو مدیریت میکنه و کش مربوطه رو پاک میکنه. اما بعد از نصب یا آپدیت پلاگین، بهتره دستی کش رو Flush کنید.
Object Cache و افزونههای دیگر وردپرس
Object Cache با بسیاری از افزونههای محبوب وردپرس یکپارچه کار میکنه:
- WooCommerce: اطلاعات محصولات، تنظیمات و session های سبد خرید رو کش میکنه
- Yoast SEO: دادههای SEO رو کش میکنه و Query های مکرر رو کاهش میده
- WP Rocket: با Object Cache ترکیب میشه و نتیجه عالی میده
- Advanced Custom Fields: مقادیر فیلدهای سفارشی رو کش میکنه
- LiteSpeed Cache: Object Cache داخلی داره که با Redis یکپارچهست
بهینهسازی پیشرفته Object Cache
اگه میخواید از Object Cache حداکثر استفاده رو ببرید، این نکات کمک میکنن:
Key Prefix تنظیم کنید
اگه چند نصب وردپرس روی یه سرور دارید و همه به یه Redis وصلن، باید Key Prefix مجزا داشته باشن. وگرنه کلیدها با هم تداخل پیدا میکنن:
define('WP_REDIS_PREFIX', 'mysite_');
گروههای کش رو مدیریت کنید
بعضی گروهها نباید کش بشن. مثلاً session های کاربران باید همیشه از دیتابیس خونده بشن. میتونید گروههای Ignore رو مشخص کنید.
مدیریت حافظه Redis
این تنظیمات رو در redis.conf اعمال کنید:
maxmemory 256mb
maxmemory-policy allkeys-lru
این یعنی وقتی RAM پر شد، قدیمیترین و کماستفادهترین کلیدها حذف میشن.
سوالات متداول
آیا Object Cache برای همه سایتهای وردپرسی لازمه؟
نه، برای همه لازم نیست. اگه سایت سادهای دارید با ترافیک کم، Page Cache کافیه. Object Cache بیشتر برای سایتهای پر بازدید، فروشگاههای بزرگ، و سایتهایی که صفحات داینامیک زیاد دارن ارزش داره.
Object Cache جایگزین Page Cache میشه؟
خیر، این دو مکمل همن. Object Cache دادههای خام رو کش میکنه، Page Cache HTML نهایی رو. بهترین نتیجه با استفاده از هر دو بدست میاد.
آیا Object Cache با Multisite وردپرس کار میکنه؟
بله، Redis Object Cache با وردپرس Multisite سازگاره. هر سایت توی Network کلیدهای جداگانهای در Redis داره و تداخل ایجاد نمیشه.
وقتی پلاگین نصب یا آپدیت میکنم، چطور کش پاک میشه؟
وردپرس خودش بعضی رویدادها مثل آپدیت پست یا پاک کردن ترنزیت رو مدیریت میکنه و کش مربوطه رو پاک میکنه. اما بعد از نصب یا آپدیت پلاگین، بهتره دستی کش رو Flush کنید.
جمعبندی
Object Cache یکی از بهترین کارایی هست که میتونید برای سرعت وردپرس انجام بدید. مخصوصاً برای سایتهای فروشگاهی و سایتهای با ترافیک بالا تاثیر فوقالعادهای داره. با کاهش Query های دیتابیس، فشار روی سرور کم میشه، سرعت بالا میره، و تجربه کاربری بهتر میشه.
اگه هاستتون Redis یا Memcached داره، همین الان فعالش کنید. اگه نداره، شاید وقتشه به یه هاست حرفهایتر فکر کنید. سرمایهگذاری روی بهینهسازی وردپرس مستقیم روی سئو، نرخ تبدیل و رضایت کاربر تاثیر میذاره.