اگر شما هم مثل من در مورد سرعت وردپرس کنجکاو هستید حتماً کلمه Caching را شنیده اید. اما caching / cache یک اصطلاح بسیار عمومی است.
Caching چیست؟
caching یک لایه ذخیرهسازی داده با سرعت بالاست که زیرمجموعهای از دادههایی معمولاً با ماهیت گذرا را ذخیره میکند، به طوری که در صورت درخواستهای آینده برای آن دادهها سریعتر از آنچه که با دسترسی به مکان ذخیرهسازی اولیه دادهها ممکن است، ارائه میشوند. ذخیره سازی به شما امکان می دهد تا به طور موثر از داده های بازیابی یا محاسبه شده قبلی مجددا استفاده کنید.
Caching چگونه کار می کند؟
دادههای موجود در حافظه پنهان معمولاً در سختافزار دسترسی سریع مانند RAM (حافظه دسترسی تصادفی) ذخیره میشوند و همچنین ممکن است در ارتباط با یک جزء نرمافزاری استفاده شوند. هدف اصلی caching افزایش عملکرد بازیابی داده با کاهش نیاز به دسترسی به لایه ذخیره سازی کندتر زیرین است.
برخلاف پایگاههای دادهای که معمولاً دادههای آنها کامل و بادوام است، حافظه پنهان معمولاً زیرمجموعهای از دادهها را موقتاً ذخیره میکند.
نمای کلی ذخیره سازی
RAM و موتورهای درون حافظه: با توجه به نرخ درخواست بالا یا IOPS (عملیات ورودی/خروجی در ثانیه) که توسط موتورهای RAM و In-Memory پشتیبانی میشود، کش منجر به بهبود عملکرد بازیابی اطلاعات و کاهش هزینه در مقیاس میشود.
برای پشتیبانی از مقیاس مشابه با پایگاه های داده سنتی و سخت افزار مبتنی بر دیسک، منابع اضافی مورد نیاز است. این منابع اضافی باعث افزایش هزینه میشوند و همچنان نمیتوانند به عملکرد تأخیر پایین ارائه شده توسط حافظه پنهان In-Memory دست یابند.
در وردپرس 6 سطح caching وجود دارد. برای آشنایی و اطلاع بیشتر از این کش ها با ما در ادامه ی این مقاله همراه باشید.
1_Opcode Cache
بگذارید اینطور بگوییم که بطور معمول یک کد PHP به شکلی نوشته می شود که انسان قادر به خواندن و درک آن هست. اما کامپیوتر نمی تواند آن را درک کند، برای اینکه کامپیوتر آن را بفهمد، باید به کد ماشین یا بایت کد تبدیل شود. بهطور پیشفرض، سرور در هر درخواستی باید این را در کد ماشین compile کند.
Opcode caching saves کد تبدیل شده را در حافظه ذخیره می کند تا برای درخواست های بعدی نیازی به این تبدیل نباشد.
PHP نسخه 5.5 و بالاتر با حافظه پنهان Opcode همراه است. برای تایید آن با ارائه دهنده هاست خود تماس بگیرید.
2-Object Cache
MySQL بسیار منابع فشرده ای هستند. هر بار که یک صفحه/پست را در وردپرس باز می کنید، باید حداقل 27 پرس و جو MySQL را اجرا کند. البته 27 عدد تعداد پرس و جوهای پیش فرض است، بسته به موضوع و تعداد افزونه های نصب شده ی شما ممکن است 50 یا 100 باشد. بسته به اندازه پرس و جو SQL و داده های موجود در پایگاه داده شما، هر یک از این پرس و جوها ممکن است چند میلی ثانیه طول بکشد.
اغلب اوقات، این نتایج پرس و جوی SQL را می توان در حافظه پنهان (RAM) یا در دیسک ذخیره کرد که به آن object caching می گویند. بنابراین ما با بارگذاری کار از MySQL و همچنین استفاده کمتر از منابع سرور، به جستجوها سرعت بیشتری میدهیم.
Redis و Memcached دو نرم افزار مشابه هستند که این نتایج را در حافظه پنهان می کنند. سرعت خواندن و نوشتن این نرم افزار به مراتب بالاتر از پایگاه داده هایی مانند MySQL/MariaDB است.
3-Full Page Cache
اگر یک پست وبلاگ یا محصول ووکامرس دارید، محتوا اغلب تغییر نمی کند. بنابراین عالی به نظر می رسد که یک نسخه HTML آن صفحه را به جای تولید آن از PHP برای هر درخواست ایجاد کنید.
این همان کاری است که Full Page Cache انجام می دهد. صفحه کامل را در HTML ایجاد می کند و آن را روی دیسک ذخیره می کند. این موجب می شود که درخواستهای بعدی مستقیماً به این فایلهای HTML ارائه شوند.
پلاگین های cachingمانند FlyingPress صفحات بهینه سازی شده ای را از سرورهای خود تولید می کنند و آنها را در سرور شما ذخیره می کنند.
4_HTTP Accelerators
این مرحله، مرحله ی بعد از ذخیره سازی تمام صفحه است. صفحات تولید شده در “حافظه پنهان صفحه کامل” روی یک هارد دیسک ذخیره می شوند. خواندن و نوشتن از روی هارد دیسک (حتی SSD) در مقایسه با خواندن از روی حافظه داخلی (RAM) کند است.
Redis و Memcached واقعاً در کش کردن در حافظه عالی عمل می کنند. با این حال، Varnish به طور خاص برای کش کردن درخواست های HTTP طراحی شده است و بسیاری از ویژگی های دیگر را غیر از Redis ارائه می دهد. FastCGI با Nginx را نیز می توان برای دستیابی به همان کش در حافظه پیکربندی کرد.
5_CDN
CDN (شبکه تحویل محتوا) شبکه ای از سرورها است که در سراسر جهان پخش شده اند. می توانید یک کپی از فایل های استاتیک خود (css، js، تصاویر و غیره) را در آن سرورها ذخیره کنید. بنابراین دفعه بعد که شخصی از سایت شما بازدید می کند، فایل های ثابت از نزدیکترین سرور CDN شما به کاربرتان تحویل داده می شود.
اگر وب سایت شما بیشتر یک وب سایت ثابت است، می توانید صفحات HTML را در CDN نیز کش کنید.
6_Browser Cache
هنگام ارسال پاسخ HTTP، به مرورگر میگویید که پاسخ را در حافظه پنهان نگه دارد یا خیر. هنگامی که caching صورت گرفت، برای درخواست های بعدی، پاسخ از کش مرورگر گرفته می شود. همچنین می توانید به مرورگر بگویید که چه مدت فایل ها را کش کند.
این ایده خوبی است که فایلهای استاتیک مانند CSS، JS، تصاویر، فونتها را در مرورگر ذخیره کنید زیرا اغلب بهروزرسانی نمیشوند.
نتیجه:
از کدام نوع کش باید استفاده کنم؟
ذخیره Opcode به طور پیش فرض توسط اکثر شرکت های خوب میزبان، فعال است. اجرای کش مرورگر و کش CDN آسان است و برای انواع وب سایت ها توصیه می شود. اگر وب سایت شما محتوای پویای زیادی ندارد و بیشتر استاتیک محسوب می شود، پس حتماً باید Full Page Cache را پیاده سازی کنید. شتاب دهنده های HTTP همچنین می توانند سرعت زیادی را افزایش دهند و ترافیک بالایی را در این مورد مدیریت کنند.
اما اگر سایت شما محتویات پویای زیادی داشته باشد، Full Page Cache و ذخیره سازی شتاب دهنده های HTTP در هر صفحه امکان پذیر نخواهد بود. بنابراین به شدت توصیه می شود که پرس و جوها را با استفاده از Object cache کش کنید.
اگر سؤال یا بازخوردی دارید در زیر کامنت کنید.