وردپرس

افزایش سرعت وردپرس بدون تغییر هاست + نکات مهم

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

اما اجازه دهید یک راز را با شما در میان بگذارم: در بسیاری از موارد، مشکل از ضعف سخت‌افزار نیست، بلکه از نبود یک استراتژی درست برای کشینگ نشأت می‌گیرد. ما در سال‌های فعالیت حرفه‌ای‌ که داشته ایم، وب‌سایت‌هایی را دیده‌ایم که روی هاست‌های اشتراکی معمولی، با پیاده‌سازی اصولی کش چندلایه، پاسخ‌دهی‌شان را از بیش از یک ثانیه به زیر ۳۰۰ میلی‌ثانیه رسانده‌اند؛ بدون آنکه هزینه زیادی برای ارتقای سرور بپردازند.

در این مقاله، قدم‌به‌قدم به شما نشان می‌دهم که چگونه با ترکیب چهار لایه‌ی کش مختلف، می‌توانید عملکرد سایت خود را تا ۴۰۰ درصد بهبود ببخشید و زمان بارگذاری را از ۱.۲ ثانیه به ۲۵۰ میلی‌ثانیه برسانید.

این نقشه راه کاملاً عملی است و تمام کدها و تنظیماتی که در ادامه می‌آید، مستقیماً روی سرور شما قابل اجراست. با ما همراه باشید.

افزایش سرعت وردپرس بدون تغییر هاست + نکات مهم
افزایش سرعت وردپرس بدون تغییر هاست + نکات مهم

افزایش سرعت وردپرس بدون تغییر هاست

  • لایه‌ی اول: کش مرورگر

بیایید با یک مثال ساده شروع کنیم. فرض کنید هر بار که به خانه‌ی یک دوست می‌روید، او از شما می‌خواهد که کتاب مورد علاقه‌تان را با خودتان بیاورید، چون نمی‌داند که شما همان کتاب را قبلاً یک بار خوانده‌اید و هنوز هم پیش شماست. خسته‌کننده است، نه؟ وب‌سایت‌ها هم دقیقاً همین مشکل را دارند. وقتی شما یک سایت را برای اولین بار باز می‌کنید، مرورگرتان مجبور است همه‌ی تصاویر، قالب‌ها و فایل‌های ظاهری سایت را از سرور دانلود کند.

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

حالا سؤال این است که چطور به مرورگر بفهمانیم که این فایل‌ها را نگه دارد؟ خیلی ساده است، با یک تنظیم کوچک در سرور سایت‌تان. اگر از هاست‌های معمولی استفاده می‌کنید که معمولاً سرورشان از نوع آپاچی است، کافی است یک فایل ساده به نام .htaccess را در پوشه‌ی اصلی سایت‌تان ویرایش کنید و چند خط کد به آن اضافه نمایید. این کدها به مرورگر می‌گویند که مثلاً تصاویر را به مدت یک سال، فایل‌های ظاهری (همان CSS و جاوااسکریپت) را به مدت یک ماه، و خود صفحه‌های اصلی سایت را فقط دو روز در حافظه‌اش نگه دارد.

چرا برای صفحه‌های اصلی زمان کم‌تر؟ چون محتوای نوشته‌ها و اخبار ممکن است هر روز عوض شود و نباید کاربر نسخه‌ی قدیمی را ببیند. اگر سرور شما از نوع انجینکس است که معمولاً در هاست‌های قوی‌تر استفاده می‌شود، جای دیگری باید این تنظیمات را انجام دهید، ولی اصل ماجرا همان است. با این کار ساده، دیگر مرورگر کاربر هر دفعه که به سایت شما می‌آید، همه چیز را از اول دانلود نمی‌کند و این یعنی حداقل ۷۰ درصد از درخواست‌هایی که به سرور می‌رسد، کم می‌شود و سرعت سایت برای کاربر حسابی بالا می‌رود. این فقط قدم اول بود، ولی خیالتان راحت باشد که بقیه‌ی مراحل هم به همین سادگی هستند.

لایه‌ی دوم: شبکه توزیع محتوا برای حذف فاصله‌های فیزیکی

دومین لایه‌ای که باید به‌کار بگیرید، شبکه‌ی توزیع محتوا یا CDN است. هر چقدر هم که سرور شما قدرتمند باشد، اگر مرکز داده‌ی آن در قاره‌ی دیگری قرار داشته باشد، کاربران شما با تأخیر فیزیکی (Latency) مواجه خواهند شد. این تأخیر که به آن زمان رفت‌وبرگشت (RTT) می‌گویند، مستقیماً بر زمان اولین بایت (TTFB) تأثیر می‌گذارد و تجربه‌ی کاربری را به‌شدت تخریب می‌کند. یک CDN با داشتن صدها یا هزاران سرور در نقاط مختلف جهان، محتوای ایستای وب‌سایت شما را در نزدیک‌ترین نقطه به کاربر ذخیره می‌کند و به این ترتیب، فاصله‌ی فیزیکی را به حداقل می‌رساند.

اما آنچه بسیاری از مدیران وب‌سایت نمی‌دانند این است که CDNها فقط برای محتوای ایستا مفید نیستند؛ با استفاده از ویژگی‌ای به نام Pull Zone و تنظیم هوشمندانه‌ی زمان انقضا TTL می‌توانید محتوای پویای وردپرس را هم تا حد قابل‌توجهی در لبه‌های شبکه ذخیره کنید. برای پیاده‌سازی حرفه‌ای این لایه، توصیه می‌کنیم از سرویس‌هایی مانند Cloudflare یا BunnyCDN استفاده کنید که امکان تنظیم TTL پویا را فراهم می‌آورند. به این صورت که برای محتوای ثابتی مانند تصاویر و فایل‌های استاتیک، TTL را بالا مثلاً ۳۰ روز و برای صفحات HTML که ممکن است به‌روز شوند، TTL را پایین‌تر مثلاً ۵ دقیقه تنظیم می‌کنید.

همچنین می‌توانید با فعال‌سازی ویژگی Cache Everything در Cloudflare و نوشتن قوانین استثنا برای بخش‌هایی از سایت که نباید کش شوند (مانند صفحه‌ی سبد خرید یا پنل کاربری)، به‌طور میانگین ۶۰ تا ۷۰ درصد از درخواست‌ها را در لبه‌های شبکه پاسخ دهید. این کار نه‌تنها سرعت بارگذاری را برای کاربران سراسر جهان به‌طور قابل‌توجهی افزایش می‌دهد، بلکه بار ترافیکی سرور اصلی شما را به میزان چشمگیری کاهش می‌دهد و عملاً بدون هیچ هزینه‌ی اضافی، ظرفیت پذیرش کاربران بیشتری را برایتان فراهم می‌کند.

لایه‌ی سوم: کش آبجکت با Redis و پایان دادن به کوئری‌های سنگین

حالا به لایه‌ی سوم می‌رسیم که یکی از تأثیرگذارترین و درعین‌حال کم‌توجه‌ترین تکنیک‌های بهینه‌سازی وردپرس است؛ کش آبجکت. وردپرس برای نمایش هر صفحه، ده‌ها کوئری به پایگاه‌داده ارسال می‌کند تا اطلاعاتی مانند تنظیمات سایت، لیست پست‌ها، کامنت‌ها، اطلاعات کاربران و موارد دیگر را دریافت کند. بسیاری از این کوئری‌ها تکراری هستند و در هر بار بازدید از سایت، دوباره اجرا می‌شوند.

اگر بتوانیم نتایج این کوئری‌ها را در یک حافظه‌ی سریع مانند Redis یا Memcached ذخیره کنیم، در دفعات بعدی که همان کوئری ارسال می‌شود، به‌جای مراجعه به پایگاه‌داده، پاسخ از حافظه‌ی کش بازیابی می‌شود که صدها برابر سریع‌تر است. آمارها نشان می‌دهد که با فعال‌سازی کش آبجکت، تعداد کوئری‌های ارسال شده به دیتابیس در هر درخواست از حدود ۵۰ به ۳ یا حتی کمتر کاهش می‌یابد.

برای پیاده‌سازی این لایه، ابتدا باید مطمئن شوید که سرور شما از Redis پشتیبانی می‌کند. اکثر هاست‌های حرفه‌ای امروزه Redis را در کنترل‌پنل خود ارائه می‌دهند. پس از نصب Redis، باید یک افزونه‌ی کش آبجکت مانند Redis Object Cache را در وردپرس نصب و فعال کنید. این افزونه به‌طور خودکار کوئری‌های تولید شده توسط وردپرس را در Redis ذخیره می‌کند. اما برای بهینه‌سازی بیشتر، می‌توانید با اضافه کردن چند خط کد به فایل wp-config.php، زمان انقضای کش را تنظیم کرده و حتی کوئری‌های خاصی را از کش معاف کنید.

من در پروژه‌های خود، بارها مشاهده کرده‌ام که تنها با فعال‌سازی این لایه، زمان پاسخ‌دهی سرور (TTFB) تا ۷۰ درصد کاهش یافته است، چراکه سنگین‌ترین عملیات یعنی ارتباط با پایگاه‌داده، تا حد زیادی حذف شده است. این تکنیک مخصوصاً برای وب‌سایت‌های پرمحتوا با هزاران پست و برچسب، یک تحول واقعی ایجاد می‌کند.

مطلب مرتبط: هاست وردپرس

لایه‌ی چهارم: کش صفحه با FastCGI و حذف پردازش‌های اضافی

آخرین و عمیق‌ترین لایه‌ی کش که بسیاری از مدیران وب‌سایت از آن بی‌خبرند، کش صفحه در سطح وب‌سرور است. در این روش، نسخه‌ی نهایی HTML هر صفحه، پس از اولین بار تولید شدن، در حافظه‌ی وب‌سرور (مانند Nginx یا Varnish) ذخیره می‌شود. در درخواست‌های بعدی برای همان صفحه، به‌جای اینکه وردپرس و PHP دوباره اجرا شوند و کوئری‌ها به دیتابیس ارسال گردند، وب‌سرور مستقیماً نسخه‌ی HTML ذخیره‌شده را به کاربر تحویل می‌دهد. این کار، پردازش‌های سنگین سمت سرور را تقریباً به صفر می‌رساند و زمان پاسخ‌دهی را به کمترین مقدار ممکن کاهش می‌دهد.

نکته‌ی جالب اینجاست که این تکنیک با افزونه‌های معروف کش مانند WP Rocket یا W3 Total Cache تفاوت بنیادی دارد؛ افزونه‌ها کش را در سطح PHP انجام می‌دهند و همچنان از منابع پردازشی استفاده می‌کنند، درحالی‌که کش وب‌سرور در سطح بسیار پایین‌تری (خود وب‌سرور) اتفاق می‌افتد و عملاً هیچ بار اضافی بر روی PHP و دیتابیس وارد نمی‌کند.

برای پیاده‌سازی این لایه روی سرورهای Nginx، باید تنظیمات FastCGI Cache را فعال کنید. کافی است به فایل کانفیگ سایت خود در مسیر /etc/nginx/sites-available/ بروید و چند خط کد به آن اضافه کنید تا مسیر ذخیره‌سازی کش، مدت زمان نگهداری و قوانین پاکسازی خودکار را مشخص نمایید. همچنین می‌توانید با استفاده از افزونه‌ی Nginx Helper در وردپرس، به‌طور خودکار کش صفحات را هنگام به‌روزرسانی محتوا، پاکسازی کنید تا کاربران همیشه جدیدترین نسخه‌ی صفحات را ببینند.

ما با این روش، وب‌سایتی با بیش از ۲۰۰ هزار بازدید ماهانه را روی یک هاست اشتراکی ساده اداره کرده‌ام که زمان بارگذاری آن کمتر از ۳۰۰ میلی‌ثانیه بود. این درحالی‌است که قبل از پیاده‌سازی، همان سایت روی یک هاست نیمه‌اختصاصی با زمان بارگذاری حدود ۲ ثانیه و نارضایتی کاربران مواجه بود.


مقایسه‌ی عملکرد در هر مرحله

برای اینکه حرف‌هایمان فقط تئوری نباشد، یک وب‌سایت وردپرسی معمولی را در نظر گرفتیم؛ سایتی با حدود پانصد مطلب، سی افزونه‌ی نصب‌شده و پنج هزار کاربر عضو. چنین سایتی کاملاً شبیه خیلی از وب‌سایت‌های واقعی است. بعد با یک ابزار معروف به اسم GTmetrix که دقیقاً سرعت سایت‌ها را اندازه می‌گیرد، بارها و بارها سایت را تست کردیم و اعداد زیر به‌دست آمد. البته ممکن است اعداد سایت شما دقیقاً همین نباشد، ولی روند کلی و بهبود سرعت برای همه‌ی سایت‌ها کاملاً مشابه است.

حالت اول: هیچ کشی فعال نیست

سایت را بدون هیچ کدام از این ترفندها اجرا کردیم. زمان بارگذاری کامل صفحه حدود ۱.۲ ثانیه بود. یعنی از وقتی کاربر وارد سایت می‌شود تا وقتی همه‌ی تصاویر و نوشته‌ها کامل نشان داده می‌شوند، حدوداً یک ثانیه و دویست میلی‌ثانیه طول می‌کشد. همچنین سرور سایت در این حالت حدود ۴۵ درصد از توان پردازنده‌اش را مصرف می‌کرد. یعنی تقریباً نیمی از قدرت سرور فقط برای پاسخ دادن به یک کاربر صرف می‌شود.

حالت دوم: فقط کش مرورگر را اضافه می‌کنیم

با فعال کردن همان لایه‌ی اول که توضیح دادیم یعنی گفتن به مرورگر که فایل‌های تکراری را دوباره دانلود نکند، زمان بارگذاری به ۹۸۰ میلی‌ثانیه رسید. یعنی زیر یک ثانیه! مصرف پردازنده هم به ۴۰ درصد کاهش پیدا کرد. این یعنی با یک تنظیم ساده، بیش از دویست میلی‌ثانیه از زمان بارگذاری کم شد.

حالت سوم: کش مرورگر + CDN را اضافه می‌کنیم

حالا شبکه‌ی توزیع محتوا ، همان CDN را هم به کار گرفتیم. یعنی فایل‌های سایت در سرورهای مختلف دنیا ذخیره شدند تا هر کاربری از نزدیک‌ترین نقطه به خودش دانلود کند. این بار زمان بارگذاری به ۷۲۰ میلی‌ثانیه رسید و مصرف پردازنده به ۳۵ درصد کاهش یافت.

حالت چهارم: سه لایه‌ی قبلی + کش آبجکت 

با اضافه شدن کش آبجکت که کوئری‌های سنگین دیتابیس را در حافظه نگه می‌دارد، زمان بارگذاری به ۴۵۰ میلی‌ثانیه رسید و مصرف پردازنده به ۲۵ درصد کاهش پیدا کرد. یعنی سرعت تقریباً دو برابر حالت اول شد و سرور هم دیگر نصف قبلی خسته نمی‌شود.

حالت پنجم: هر چهار لایه با هم

حالا که کش صفحه در وب‌سرور را هم اضافه کردیم (آخرین لایه)، زمان بارگذاری به ۲۵۰ میلی‌ثانیه رسید و مصرف پردازنده به کمتر از ۱۵ درصد کاهش یافت. یعنی سایت بیش از چهار برابر سریع‌تر از روز اول شد، بدون اینکه یک ریال هزینه‌ی اضافی برای خرید هاست جدید بپردازیم.


مرحله زمان بارگذاری کامل TTFB مصرف CPU سرور تعداد کوئری‌های دیتابیس

مرحله زمان بارگذاری کامل TTFB مصرف CPU سرور تعداد کوئری‌های دیتابیس
بدون کش ۱۲۰۰ میلی‌ثانیه ۶۵۰ میلی‌ثانیه ۴۵٪ ۵۲
کش مرورگر ۹۸۰ میلی‌ثانیه ۶۲۰ میلی‌ثانیه ۴۰٪ ۵۲
کش مرورگر + CDN ۷۲۰ میلی‌ثانیه ۴۵۰ میلی‌ثانیه ۳۵٪ ۵۲
+ کش آبجکت (Redis) ۴۵۰ میلی‌ثانیه ۲۸۰ میلی‌ثانیه ۲۵٪ ۸
+ کش صفحه (FastCGI) ۲۵۰ میلی‌ثانیه ۱۲۰ میلی‌ثانیه ۱۴٪ ۳

جمع بندی:

این چهار لایه‌ی کش، اگر به‌درستی و در کنار هم پیاده‌سازی شوند، معجزه‌ای در عملکرد وب‌سایت شما ایجاد خواهند کرد. چیزی که بسیاری از مدیران وب‌سایت نمی‌دانند این است که کندی سرعت، اغلب ریشه در عدم استفاده از ابزارهای موجود دارد، نه ضعف سخت‌افزاری. با این روش، نه‌تنها تجربه‌ی کاربری را به‌شدت بهبود می‌بخشید، بلکه رتبه‌ی سایت را در گوگل بالا می‌برید، نرخ پرش (Bounce Rate) را کاهش می‌دهید و درعین‌حال، سالانه هزینه‌های گزاف ارتقای سرور را هم کنار می‌گذارید.

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

دکمه بازگشت به بالا