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

کارت «سرور وب» با مقدار Apache: زیر آن لوگوی خط‌خورده لایت اسپید با ۸۲ میلی‌ثانیه و لوگوی راکت با ۱٫۵ میلی‌ثانیه
محصولات زیر برای شماست...
جدیدترین مقالات
دسترسی سریع
فهرست محتوا

همان فروشگاه ووکامرس را روی دو سرور راه انداختیم، آپاچی (Apache) و اوپن لایت اسپید (OpenLiteSpeed)، و روی هر کدام یک بار لایت اسپید کش (LiteSpeed Cache) و یک بار راکت (WP Rocket) نصب کردیم. روی آپاچی، لایت اسپید کش هیچ صفحه‌ای را کش نکرد: زمان پاسخ صفحه اصلی ۸۲ میلی‌ثانیه ماند، در همان حدود ۷۷ میلی‌ثانیه‌ای که بدون افزونه دیدیم. راکت روی همان سرور همین زمان را به ۱٫۵ میلی‌ثانیه رساند.

پس پیش از مقایسه دو افزونه، سرور هاست خود را ببینید. اگر لایت اسپید نیست و از QUIC.cloud هم استفاده نمی‌کنید، کش صفحه لایت اسپید کش کار نمی‌کند و از این دو، راکت است که صفحه را کش می‌کند. اگر لایت اسپید است، هر دو کش می‌کنند و در آزمون ما روی اوپن لایت اسپید، لایت اسپید کش ظرفیت بیشتری داشت، یعنی در یک ثانیه درخواست بیشتری جواب داد، ۲۱٬۵۸۸ در برابر ۱٬۶۲۳ برای راکت. این تفاوت برای یک بازدیدکننده محسوس نیست و وقتی سایت زیر فشار ترافیک باشد به چشم می‌آید. در همان آزمون، قیمتی که از راه REST API عوض شد در لایت اسپید کش به صفحه کش‌شده نرسید. راکت را وردپرس نیاز می‌فروشد و لایت اسپید کش رایگان است؛ آزمون برای هر دو یکی بود.

کش صفحه لایت اسپید کش به سرور لایت اسپید یا QUIC.cloud نیاز دارد

مستندات خود لایت اسپید این را صریح نوشته است:

Anyone can use the LSCWP plugin, even those who are using Apache, nginx, or some other non-LiteSpeed server. However, none of the plugin’s caching functionality will be available to you.

صفحه نصب در مستندات لایت اسپید می‌گوید کش فقط با سرور لایت اسپید یا سرویس QUIC.cloud CDN کار می‌کند. دلیلش در توضیح افزونه آمده است: کش لایت اسپید در خود سرور نگهداری می‌شود و افزونه فقط به سرور می‌گوید کدام صفحه را تا کی نگه دارد.

روی آپاچی هم همین را دیدیم. افزونه نصب و فعال شد و بلوکی در فایل htaccess نوشت، اما در پاسخ سرور به هیچ‌یک از هفت نشانی‌ای که بررسی کردیم (صفحه اصلی، فروشگاه، دو صفحه محصول، سبد خرید، تسویه حساب و حساب کاربری) هدر X-LiteSpeed-Cache نبود. برای هر درخواست تقریباً یک بار PHP اجرا شد و صفحه اصلی ۲۳٫۳ درخواست در ثانیه جواب داد، در برابر ۲۴٫۵ بدون افزونه. روی اوپن لایت اسپید همان افزونه، بدون تغییر در تنظیمات، از درخواست دوم هدر X-LiteSpeed-Cache با مقدار hit برگرداند.

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

سرور هاست را در پیشخوان وردپرس می‌بینید

از پیشخوان به «ابزارها > سلامت سایت > اطلاعات» بروید و بخش «سرور» را باز کنید. ردیف «سرور وب» نرم‌افزاری را نشان می‌دهد که سایت شما را اجرا می‌کند؛ وردپرس این مقدار را از خود سرور می‌خواند. در آزمون ما روی اوپن لایت اسپید نوشته بود LiteSpeed و روی آپاچی نوشته بود Apache/2.4.68 (Debian).

راه دوم، تب Network ابزار توسعه‌دهنده مرورگر است. صفحه‌ای را بدون ورود به حساب دو بار پشت‌سرهم بگیرید؛ اگر کش لایت اسپید کار کند، بار دوم هدر X-LiteSpeed-Cache با مقدار hit برمی‌گردد. اگر در یک صفحه عادی نه hit دیدید و نه miss و هدرهای X-QC-Cache یا X-LSADC-Cache هم نبود، مستندات لایت اسپید می‌گوید در تنظیم کش مشکلی هست. سبد خرید و تسویه حساب را برای این آزمون نگیرید، چون عمداً کش نمی‌شوند.

روی اوپن لایت اسپید، لایت اسپید کش ظرفیت بیشتری از راکت داشت

سایت آزمون وردپرس 7.1.2 با ووکامرس 11.1.2، قالب Storefront و ۳۷ محصول بود. دو سرور داشتیم: آپاچی 2.4.68 با PHP 8.3.35 و اوپن لایت اسپید 1.9.3 با PHP 8.3.33، هر کدام در Docker روی دو هسته پردازنده و یک گیگابایت حافظه. افزونه‌ها لایت اسپید کش 7.9.1 از مخزن وردپرس و راکت 3.23.5.1 بودند، همان فایلی که فروشگاه می‌فروشد، هر دو با تنظیمات پس از فعال‌سازی. هر ترکیب سه بار از صفر ساخته و اندازه‌گیری شد. روی اوپن لایت اسپید یک تغییر لازم بود: استخر پیش‌فرض PHP در ایمیج Docker آن (۱۰ پردازه) زیر هشت اتصال همزمان به صفحه‌های بدون کش متوقف شد، پس آن را روی ۳۰ گذاشتیم و همه اندازه‌گیری‌های اوپن لایت اسپید با ۳۰ انجام شد.

«زمان پاسخ» زمان رسیدن اولین بایت صفحه اصلی است، میانه ۳۰ درخواست پشت‌سرهم بدون کوکی. «درخواست در ثانیه» را ابزار ab (ApacheBench) با هشت اتصال همزمان و سه بار ده‌ثانیه‌ای اندازه گرفت. ردیف «راکت با افزونه کمکی» همان راکت است با افزونه‌ای از خود سازنده که در بخش بعد توضیح داده‌ایم.

ستون آخر می‌گوید به‌ازای هر درخواست چند بار PHP اجرا شد. روی هر دو سرور تنظیم کرده بودیم که PHP پیش از هر اجرا یک خط به یک فایل متنی اضافه کند؛ صفحه‌ای که بدون اجرای PHP برسد خطی اضافه نمی‌کند. عددها میانه سه دور هستند و در ستون درخواست در ثانیه یک دور تا ۲۰ درصد با میانه فاصله داشت.

سرورافزونهزمان پاسخ (میلی‌ثانیه)درخواست در ثانیهاجرای PHP به‌ازای هر درخواست
آپاچیهیچ۷۶٫۶۲۴٫۵۱
آپاچیلایت اسپید کش۸۲٫۰۲۳٫۳۱
آپاچیراکت۱٫۵۱٬۸۷۸۱
آپاچیراکت با افزونه کمکی۰٫۹۶٬۹۷۷۰
اوپن لایت اسپیدهیچ۸۰٫۰۲۴٫۹۱
اوپن لایت اسپیدلایت اسپید کش۰٫۷۲۱٬۵۸۸۰
اوپن لایت اسپیدراکت۱٫۶۱٬۶۲۳۱
اوپن لایت اسپیدراکت با افزونه کمکی، بدون راه‌اندازی دوباره سرور۱٫۴۱٬۷۰۰۱
نمودار میله‌ای درخواست در ثانیه برای صفحه اصلی. روی آپاچی: بدون افزونه ۲۴٫۵، لایت اسپید کش ۲۳٫۳، راکت ۱٬۸۷۸، راکت با افزونه کمکی ۶٬۹۷۷. روی اوپن لایت اسپید: بدون افزونه ۲۴٫۹، لایت اسپید کش ۲۱٬۵۸۸، راکت ۱٬۶۲۳، راکت با افزونه کمکی و بدون راه‌اندازی دوباره ۱٬۷۰۰
درخواست در ثانیه برای صفحه اصلی، میانه سه دور

روی اوپن لایت اسپید صفحه از کش خود سرور آمد و PHP اجرا نشد: ۲۱٬۵۸۸ درخواست در ثانیه، حدود ۱۳ برابر ۱٬۶۲۳ راکت. بازدیدکننده تفاوت ۰٫۷ و ۱٫۶ میلی‌ثانیه را حس نمی‌کند. فرق وقتی دیده می‌شود که سایت زیر فشار ترافیک باشد، و رفتار سایت زیر ترافیک واقعی را اندازه نگرفتیم. روی اوپن لایت اسپید هر دو افزونه، نسبت به حالت بدون افزونه، زمان پاسخ را از ۸۰ به کمتر از ۲ میلی‌ثانیه رساندند.

این عددها از یک رایانه ویندوزی با Docker است، نه از هاست ایرانی. برای دیدن ترتیب و نسبت‌ها به کار می‌آیند و عدد هاست شما را پیش‌بینی نمی‌کنند. ما فقط اوپن لایت اسپید، نسخه متن‌باز لایت اسپید، را آزمایش کردیم و این عددها را به سرور تجاری لایت اسپید (LiteSpeed Enterprise) تعمیم نمی‌دهیم.

راکت صفحه کش‌شده را با PHP تحویل می‌دهد، مگر با افزونه کمکی سازنده

راکت روی هر دو سرور و با تنظیمات پیش‌فرض برای هر صفحه کش‌شده یک بار PHP اجرا کرد. فایل کش آماده بود، اما فایل advanced-cache.php آن را می‌خواند و می‌فرستد و سرور فایل را مستقیم نمی‌دهد. دلیلش در کد راکت 3.23.5.1 این است: قانون‌هایی که به آپاچی اجازه می‌دهند فایل کش را مستقیم بدهد فقط وقتی در فایل htaccess نوشته می‌شوند که «کش جداگانه برای موبایل» خاموش باشد، و طبق مستندات راکت این گزینه پیش‌فرض روشن است. سازنده برای خاموش کردنش افزونه کمکی با نام «WP Rocket | Customize Mobile Cache options» را معرفی کرده است.

با آن افزونه روی آپاچی صفحه اصلی بدون اجرای PHP و با ۶٬۹۷۷ درخواست در ثانیه جواب داد، یعنی ۳٫۷ برابر حالت پیش‌فرض. بهایش را مستندات راکت می‌گوید: موبایل همان کش دسکتاپ را می‌گیرد، سه گزینه راکت (Optimize Critical Images، Automatic Lazy Rendering و Preconnect to external domains) خاموش می‌شوند، و اگر سایت محتوای مخصوص موبایل دارد ممکن است مشکل پیش بیاید.

دو مورد دیدیم که افزونه کمکی کار را کامل نکرد. محصولی با نامک فارسی، که در آدرس با کدهای درصدی نوشته می‌شود (۳۶ محصول از ۳۷ محصول فروشگاه آزمون ما این‌طور بودند)، روی آپاچی حتی با افزونه کمکی هر بار PHP اجرا کرد: ۲٬۳۶۷ درخواست در ثانیه (بدون آن ۱٬۶۹۰)، در برابر ۶٬۵۱۶ برای محصولی با نامک لاتین. و روی اوپن لایت اسپید افزونه کمکی در جدول اثر روشنی نداشت (۱٬۶۲۳ و ۱٬۷۰۰ درخواست در ثانیه؛ دورهای هر ردیف بیشتر از این با هم فرق داشتند)؛ آن اندازه‌گیری‌ها بدون راه‌اندازی دوباره سرور گرفته شد. در آزمایشی جدا روی یک نمونه (راکت و افزونه کمکی روی اوپن لایت اسپید)، صفحه محصولی با نامک لاتین پیش از راه‌اندازی دوباره سرور PHP اجرا کرد و بعد از آن نه.

تغییر قیمت از راه REST API در لایت اسپید کش به صفحه کش‌شده نرسید

سبد خرید، تسویه حساب و حساب کاربری در هیچ‌کدام کش نشدند. لایت اسپید کش برای این سه صفحه no-cache فرستاد و راکت طبق مستندات خودش آن‌ها را کنار می‌گذارد. در آزمون ما هر سه برای هر درخواست PHP اجرا کردند.

سه تغییر قیمت و موجودی را با درخواست‌های واقعی HTTP اجرا کردیم و بعد صفحه را بدون ورود به حساب باز کردیم. «هر چهار حالت» یعنی راکت روی آپاچی و اوپن لایت اسپید، با افزونه کمکی و بدون آن.

تغییرلایت اسپید کش (اوپن لایت اسپید)راکت (هر چهار حالت)
قیمت دو محصول از راه REST APIهر دو بار قیمت قدیمی ماندقیمت جدید از اولین درخواست
قیمت یک محصول در ویرایش سریع پیشخوانقیمت جدید از اولین درخواستقیمت جدید از اولین درخواست
تمام شدن موجودی با سفارشی که از REST API ثبت شد«ناموجود» از اولین درخواست«ناموجود» از اولین درخواست

در لایت اسپید کش 7.9.1 روی اوپن لایت اسپید 1.9.3، صفحه محصول بعد از تغییر قیمت با REST API همچنان کش‌شده بود و قیمت قدیمی را نشان می‌داد، شش ثانیه بعد هم. مدت نگه‌داری پیش‌فرض صفحه هفت روز بود. REST API ووکامرس داده‌ها را با درخواست JSON می‌نویسد؛ اگر قیمت یا موجودی را با برنامه یا افزونه‌ای از بیرون همگام می‌کنید، بعد از اولین همگام‌سازی صفحه محصول را بدون ورود به حساب باز کنید و قیمت را ببینید.

علت را آزمایش نکردیم؛ آنچه در این بند می‌گوییم فقط از خواندن کد است. لایت اسپید کش 7.9.1 صفحه را وقتی نوشته‌ای حذف شود یا به سطل زباله برود پاک می‌کند، و هر بار که نوشته‌ای منتشرشده با wp_update_post ذخیره شود، حتی اگر وضعیتش عوض نشده باشد، و وقتی موجودی عوض شود یا فروش ویژه‌ای شروع یا تمام شود. چیزی در کدش پیدا نکردیم که با ذخیره‌شدن فقط قیمت صفحه را پاک کند. ووکامرس 11.1.2 هم نوشته محصول را فقط وقتی با wp_update_post ذخیره می‌کند که چیزی مثل نام، توضیح، وضعیت یا نامک عوض شده باشد؛ با تغییر فقط قیمت این کار را نمی‌کند. ویرایش سریع پیشخوان وردپرس از wp_update_post می‌گذرد و شاید برای همین قیمت آن‌جا از اولین درخواست به‌روز بود. اگر این برداشت درست باشد، هر راه دیگری که قیمت را فقط با ذخیره محصول ووکامرس عوض کند همین رفتار را دارد؛ WP-CLI و درون‌ریزی محصول را اجرا نکردیم.

دو افزونه کش را با هم فعال نکنید

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

کدام را کِی انتخاب کنیم

  • اگر سرور شما لایت اسپید است: لایت اسپید کش رایگان است و در آزمون ما روی اوپن لایت اسپید ظرفیت بیشتری داد. اگر قیمت یا موجودی را از بیرون با REST API همگام می‌کنید، اول آزمون بخش «تغییر قیمت از راه REST API» را روی سایت خودتان اجرا کنید. راکت هم روی اوپن لایت اسپید صفحه‌ها را کش کرد و در مستندات سازنده LiteSpeed و OpenLiteSpeed در فهرست سرورهای سازگار آمده‌اند، پس اگر آن را دارید برای کش عوضش نکنید.
  • اگر آپاچی یا هر سرور غیر لایت اسپید دارید: راکت. روی آپاچی اندازه گرفتیم و مستندات راکت Nginx و IIS را هم سازگار می‌داند. لایت اسپید کش روی این سرورها بدون QUIC.cloud کش صفحه ندارد؛ اگر کش لایت اسپید را می‌خواهید، مستندات لایت اسپید دو راه می‌دهد: از هاست بخواهید شما را به سرور لایت اسپید ببرد، یا QUIC.cloud CDN را امتحان کنید. افزونه کمکی راکت را فقط اگر ظرفیت بیشتر لازم دارید بسنجید؛ با آن موبایل کش دسکتاپ را می‌گیرد و سه گزینه راکت خاموش می‌شوند، و برای محصولی با نامک فارسی در آزمون ما باز هم هر بار PHP اجرا شد.

اگر می‌خواهید کسی کش را برایتان نصب و تنظیم کند، درخواست پشتیبانی را ثبت کنید. افزونه‌های دیگر کش و بهینه‌سازی را در دسته کش و بهینه‌سازی می‌بینید، و اگر بعد از کش هنوز نمره سرعت سایت پایین است، بهینه‌سازی Core Web Vitals را ببینید.

آزمایش نکردیم، از جمله: سرور تجاری لایت اسپید (LiteSpeed Enterprise)، Nginx، بهینه‌سازی تصویر، نمره سرعت گوگل، و گزینه «حذف CSS استفاده‌نشده» راکت، که به سرویس بیرونی نیاز دارد.

پرسش‌های متداول

لایت اسپید کش بهتر است یا راکت؟

به سرور بستگی دارد. روی اوپن لایت اسپید در آزمون ما لایت اسپید کش ظرفیت بیشتری داشت، ۲۱٬۵۸۸ در برابر ۱٬۶۲۳ درخواست در ثانیه، اما در همان آزمون قیمتی که از راه REST API عوض شد به صفحه کش‌شده نرسید. روی آپاچی فقط راکت صفحه را کش کرد.

لایت اسپید کش روی هاست آپاچی کش صفحه دارد؟

نه. مستندات لایت اسپید می‌گوید کش صفحه بدون سرور لایت اسپید یا QUIC.cloud CDN کار نمی‌کند، و در آزمون ما روی آپاچی هیچ صفحه‌ای کش نشد: زمان پاسخ صفحه اصلی ۸۲ میلی‌ثانیه ماند.

از کجا بفهمم سرور هاستم لایت اسپید است؟

در پیشخوان وردپرس به ابزارها، سلامت سایت، اطلاعات و بخش سرور بروید و ردیف «سرور وب» را ببینید. روی اوپن لایت اسپید در آزمون ما LiteSpeed نوشته بود.

راکت روی سرور لایت اسپید کار می‌کند؟

بله. در مستندات سازنده LiteSpeed و OpenLiteSpeed در فهرست سرورهای سازگار آمده‌اند، و در آزمون ما روی اوپن لایت اسپید صفحه‌ها را کش کرد: ۱٬۶۲۳ درخواست در ثانیه برای صفحه اصلی.

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

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

سبد خرید و تسویه حساب ووکامرس کش می‌شود؟

در آزمون ما نه. سبد خرید، تسویه حساب و حساب کاربری در هر دو افزونه برای هر درخواست PHP اجرا کردند.

تصویر سمانه جعفری
سمانه جعفری
پیشنهاد میکنیم این مقالات را هم بخوانید

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