راهنمای فنی و عملیاتی برای تنظیم کشینگ (Caching) سرور ووکامرس برای بهبود سرعت.
- محمد یاسر گنجی دوست
- No Comments
راهنمای جامع کشینگ ووکامرس: تنظیمات سرور برای سرعت موشکی (معماری سرعت)
ووکامرس به ذات سنگین است. صدها درخواست دیتابیس برای قیمت، موجودی، ویژگیها و عکسها. بدون کشینگ، سرور شما برای هر بازدیدکننده باید چرخ را از اول اختراع کند (صفحه را بسازد). اما کش کردن فروشگاه اینترنتی مثل راه رفتن در میدان مین است. اگر صفحه “تسویه حساب” را کش کنید، اطلاعات شخصی مشتریان لو میرود.
در این مقاله، معماری ۳ لایه کشینگ (Page, Object, Opcode) را بررسی میکنیم و یاد میگیریم چطور بدون شکستن سایت، سرعت را ۱۰ برابر کنیم.
لایه اول: کش صفحه (Page Caching) – خط مقدم
این نوع کش، کلِ کد HTML نهایی را ذخیره میکند و به کاربر بعدی نشان میدهد. این سریعترین نوع کش است.
۱. انتخاب وبسرور مناسب
به عنوان توسعهدهنده، باید به مشتری پیشنهاد دهی که هاست مناسب بخرد:
-
LiteSpeed Enterprise (پادشاه وردپرس): بهترین گزینه. پلاگین LSCache مستقیماً با هسته سرور صحبت میکند.
-
Nginx (FastCGI Cache): بسیار قدرتمند و رایگان، اما کانفیگ آن سخت است (نیاز به دانش لینوکس دارد).
-
Apache: برای ووکامرسهای شلوغ توصیه نمیشود (مگر اینکه لایه Varnish جلویش باشد).
۲. قانون حیاتی: استثنائات (Exclusions)
امیررضا جان، این بخش را باید پرینت بگیری و روی مانیتورت بچسبانی. هرگز، هرگز و هرگز صفحات زیر را کش نکنید (باید در تنظیمات افزونه کش یا کانفیگ سرور وارد شوند):
-
صفحات:
-
/cart/(سبد خرید) -
/checkout/(تسویه حساب) -
/my-account/(حساب کاربری) -
/reset-password/
-
-
کوکیهای ووکامرس (Dynamic Cookies): اگر سرور این کوکیها را در مرورگر کاربر دید، باید کش را غیرفعال کند:
-
woocommerce_items_in_cart(یعنی کاربر چیزی در سبد دارد، پس باید صفحه واقعی را ببیند). -
wp_woocommerce_session_ -
woocommerce_cart_hash
-
لایه دوم: کش آبجکت (Object Caching) – نجاتدهنده دیتابیس
ووکامرس “دیتابیسخور” است. برای نمایش یک محصول، ممکن است ۴۰ کوئری به دیتابیس بزند. آبجکت کش (مثل Redis)، نتیجه این کوئریها را در “رم” (RAM) سرور نگه میدارد.
چرا Redis؟
رم هزاران بار سریعتر از هارد دیسک (SSD) است.
-
بدون Redis: وردپرس میپرسد: “قیمت پسته چند است؟” -> دیتابیس هارد را میگردد -> ۵۰ میلیثانیه زمان.
-
با Redis: وردپرس میپرسد: “قیمت پسته چند است؟” -> رم جواب میدهد -> ۰.۱ میلیثانیه زمان.
نحوه فعالسازی:
-
روی سرور باید اکستنشن
RedisیاMemcachedنصب باشد. -
در وردپرس، افزونهای مثل “Redis Object Cache” را نصب کن و دکمه Enable را بزن.
-
هشدار: اگر روی هاست اشتراکی هستید، مطمئن شوید که “Prefix” (پیشوند) دیتابیس یکتا باشد تا دیتای سایتهای دیگر با سایت شما قاطی نشود.
لایه سوم: OPcache (کامپایلر PHP)
وردپرس با PHP نوشته شده. هر بار که کسی سایت را باز میکند، سرور باید کدهای PHP را بخواند و به زبان ماشین (Bytecode) ترجمه کند. OPcache این ترجمه را یک بار انجام میدهد و ذخیره میکند.
-
تنظیمات پیشنهادی
php.iniبرای ووکامرس:
opcache.enable=1
opcache.memory_consumption=256 ;برای شاپهای بزرگ حداقل 512
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 ;در محیط پروداکشن برای سرعت بیشتر (اما بعد از تغییر کد باید کش را خالی کنید)
استراتژی فرگمنت کشینگ (Fragment Caching)
این تکنیک پیشرفته مخصوص توست. فرض کن کل صفحه “استاتیک” است، به جز “آیکون سبد خرید” که تعداد کالا را نشان میدهد. آیا باید کل کش صفحه را غیرفعال کنیم؟ خیر.
از Fragment Caching (یا AJAX Loading) استفاده میکنیم:
-
کل صفحه کش میشود.
-
قیمتها و دکمه سبد خرید با یک درخواست AJAX جداگانه بعد از لود صفحه پر میشوند.
-
نکته: اکثر قالبهای مدرن ووکامرس (مثل Woodmart) گزینهای دارند به نام “Load cart via AJAX”. حتماً این گزینه را روشن کن.
بررسی افزونههای برتر (کدام را نصب کنیم؟)
۱. WP Rocket (پولی – راحتترین)
-
مزیت: تنظیمات پیشفرض عالی برای ووکامرس دارد. خودش صفحات سبد خرید و چکاوت را مستثنی میکند.
-
عیب: پول لایسنس.
۲. LiteSpeed Cache (رایگان – قویترین)
-
مزیت: اگر وبسرور لایتاسپید است، معجزه میکند. قابلیت ESI (Edge Side Includes) دارد که اجازه میدهد بخشهای عمومی صفحه کش شوند و بخشهای خصوصی (مثل نام کاربر) داینامیک بمانند.
-
عیب: تنظیماتش بسیار پیچیده و زیاد است.
۳. W3 Total Cache (رایگان – تخصصی)
-
مزیت: کنترل کامل روی تمام لایهها (Object, Page, Database, Browser).
-
عیب: اگر اشتباه تنظیم شود، سایت را کاملاً دان (Down) میکند.
چکلیست عیبیابی (وقتی کش دردسرساز میشود)
اگر مشتری زنگ زد و گفت: “سبد خرید خالی نمیشه” یا “قیمتها آپدیت نشدن”:
-
کش مرورگر: به مشتری بگو با
Ctrl + F5تست کند. -
کش CDN: اگر از کلودفلر (Cloudflare) استفاده میکنی، حواست باشد که HTML را کش نکند (مگر اینکه Rule خاص نوشته باشی).
-
تداخل کوکی: چک کن آیا کوکیهای ووکامرس درست ست میشوند؟ (در کنسول مرورگر تب Application -> Cookies).
-
نسخه موبایل: گاهی کش دسکتاپ به موبایل نمایش داده میشود (یا برعکس). در تنظیمات افزونه کش، گزینه “Separate Cache for Mobile” را فعال کن.
بخش پرسش و پاسخ فنی (FAQ)
۱. آیا Cloudflare برای ووکامرس خوب است؟ بله، اما فقط برای کش کردن عکسها، CSS و JS. هرگز از گزینه “Cache Everything” کلودفلر روی ووکامرس استفاده نکنید مگر اینکه از ویژگی “Bypass Cache on Cookie” (که در پلنهای بیزینس ۲۰ دلاری است) استفاده کنید.
۲. چرا بعد از تغییر قیمت محصول، قیمت در سایت عوض نمیشود؟ چون کش آبجکت (Object Cache) یا کش صفحه هنوز منقضی نشده. شما باید TTL (Time To Live) را تنظیم کنید (مثلاً ۱۰ ساعت). یا از افزونههایی استفاده کنید که با دکمه “Update” محصول، کش آن صفحه خاص را پاک کنند (Purge).
۳. بهترین زمان TTL برای کش ووکامرس چقدر است؟ برای صفحات محصول: ۱۰ تا ۲۴ ساعت. برای صفحه اصلی: ۱ تا ۵ ساعت (اگر اسلایدر تخفیف لحظهای ندارید). برای حساب کاربری: ۰ (هیچوقت).
جمعبندی: سرعت یعنی پول
آمازون اعلام کرده که هر ۱۰۰ میلیثانیه تأخیر، ۱٪ از فروشش را کم میکند. تنظیم صحیح کشینگ سرور، ارزانترین راه برای افزایش فروش است (حتی ارزانتر از تبلیغات).
به عنوان یک توسعهدهنده، وقتی سایت مشتری را روی Redis + LiteSpeed کانفیگ میکنی و صفحات استثنا (Cart/Checkout) را درست مدیریت میکنی، سایتی تحویل میدهی که زیر ۱ ثانیه لود میشود و مشتری احساس میکند سوار جت شده است.
اقدام بعدی: آیا میخواهی کد کانفیگ Nginx (Nginx.conf rules) مخصوص ووکامرس را برایت بفرستم که دقیقاً بگوید کدام مسیرها را کش نکند؟ (این کد طلا است برای سرورهای لینوکسی).
🍑 طعم سلامتی با میوههای خشک AsanFruits
انواع میوههای خشک طبیعی و بدون افزودنی، تهیهشده از بهترین محصولات باغی ایران. میانوعدهای سالم، خوشطعم و مغذی برای هر ساعتی از روز.
مشاهده محصولات میوه خشک