Ajax یک فناوری وب مبتنی بر جاوا اسکریپت است که کمک می کند وب سایت های پویا و تعاملی ایجاد شود.کاهش منابع وردپرس از Ajax برای تأمین انرژی بسیاری از ویژگیهای اصلی قسمت مدیریت خود مانند ذخیره خودکار پست ها ، مدیریت نشست (session)کاربر و اعلان ها استفاده می کند.
به طور پیش فرض ، وردپرس همه درخواست های Ajax را از طریق فایل admin-ajax.php واقع در دایرکتوری wp-admin هدایت می کند.
تعداد زیادی درخواست همزمان Ajax می تواند منجر به مصرف زیاد admin-ajax.phpا و در نتیجه کاهش سرعت سایت وردپرسی شما شود. این یکی از رایج ترین مشکلاتی است که بسیاری از سایت های وردپرس در زمان افزایش سرعت با آن روبرو هستند. معمولاً این مشکل خود را به صورت یک سایت کند یا دارای خطای HTTP 5xx (بیشتر خطاهای ۵۰۴ یا ۵۰۲ ) نشان می دهد.
از آموزش وردپرس بیشتر بدانید
فایل admin-ajax.php چیست؟
این فایل admin-ajax.php شامل تمام کدهای مسیریابی درخواست های Ajax در وردپرس است. هدف اصلی آن ایجاد ارتباط بین کلاینت و سرور با استفاده از Ajax است. وردپرس از آن برای تازه کردن مطالب صفحه بدون بارگیری مجدد آن استفاده می کند ، بنابراین سایت را برای کاربران پویا و تعاملی می کند.
از آنجا که هسته وردپرس از Ajax برای تأمین ویژگیهای مختلف backend خود استفاده می کند ، برای استفاده از Ajax در وردپرس می توانید از همان توابع استفاده کنید. تمام کاری که شما باید انجام دهید این است که یک action را ثبت کنید ، آن را به admin-ajax.php پرونده سایت خود هدایت کنید و مشخص کنید که چگونه می خواهید مقدار را برگرداند. می توانید تنظیم کنید که HTML ، JSON یا حتی XML را برگرداند.
طبق Trac وردپرس ، فایل admin-ajax.php برای اولین بار در نسخه ۲.۱ وردپرس ظاهر شد. همچنین در انجمن توسعه وردپرس به عنوان Admin Ajax نیز شناخته می شود .
همچنین می توانید از Chrome DevTools استفاده کنید تا ببینید به admin-ajax.php چه تعداد درخواست ارسال می شود. همچنین می توانید زبانه Timings را در بخش شبکه بررسی کنید تا بفهمید چه مدت برای پردازش این درخواست ها لازم است.
در مورد پیداکردن دلیل دقیق استفاده زیاد admin-ajax.php، در درجه اول دو دلیل اصلی وجود دارد: یکی مربوط به Front-end یا جایی که سایت نمایش داده می شود ، و دیگری مربوط به Back-End یا همان قسمت مدیریت وردپرس. در زیر در مورد هر دو بحث خواهیم کرد.
افزونه ووکامرس در وردپرس چیست؟ |
حل مشکل مصرف بالای CPU در کاهش منابع وردپرس
افزونه ها یکی از رایج ترین دلایل استفاده زیاد admin-ajax.php از منابع است. به طور معمول ، این مسئله در Front End سایت مشاهده می شود و به طور مکرر در گزارش های تست سرعت نشان داده می شود.
اما افزونه ها تنها مقصر نیستند زیرا پوسته ها و هسته وردپرس ، سرور و حملات DDoS نیز می تواند دلیل استفاده زیاد Admin Ajax باشد.
چگونه می توان منشا مصرف بالای منابع توسط admin-ajax.php توسط افزونه ها و پوسته ها تعیین کرد؟
Ajax اغلب توسط توسعه دهندگان وردپرس برای ایجاد افزونه ها و پوسته های پویا و تعاملی استفاده می شود . برخی از نمونه های معروف شامل افزونه های با ویژگی هایی مانند جستجوی زنده(ajax search) ، فیلتر محصولات ، پیمایش بی نهایت(infinite scroll) ، سبد خرید پویا و چت است.
البته صرفا اینکه افزونه ای از Ajax استفاده می کند به معنای کند شدن سرعت سایت شما نیست. معمولاً Admin Ajax تا پایان بارگذاری صفحه بارگیری می شود. همچنین، می توانید درخواست های Ajax را به صورت غیرهم زمان (asynchronously) بارگذاری کنید ، دراینصورت ajax می تواند تأثیر کمی بر عملکرد صفحه برای کاربر داشته باشد.
همانطور که در گزارش WebPageTest که بالا مشاهده می کنید ، admin-ajax.php در انتهای صف درخواستها بارگیری می شود ، اما با این وجود ۷۸۰ میلی ثانیه طول می کشد. فقط برای یک درخواست وقت زیادی است.
وقتی توسعه دهندگان Ajax را به درستی روی وردپرس یا افزونه ها و پوسته ها پیاده سازی نکنند ، می تواند منجر به مشکلات عملکردی شدیدی می شود. گزارش GTmetrix فوق نمونه کاملی از چنین موردی است.
همچنین می توانید از GTmetrix برای جستجوی اطلاعات POST و Response استفاده کنید. می توانید از این ویژگی برای مشخص کردن علت مصرف بالای منابع توسط admin-ajax.php استفاده کنید.
برای انجام این کار ، به زبانه Waterfall گزارش GTmetrix رفته و سپس مورد admin-ajax.php را پیدا کرده و روی POST کلیک کنید . برای این درخواست سه زبانه خواهید دید: Header، Post و Responsive
با بررسی POST و Response نکاتی در اختیار شما قرار می گیرد تا از دلایل وجود مشکل در عملکرد مطلع شوید. برای این سایت، می توانید سرنخ ها را در برگه Response مشاهده کنید.
می بینید که بخشی از Response تگ Input با ID برابر با “fusion-form-nonce-656” می باشد.
جستجوی سریع این سرنخ شما را به سایت ThemeFusion ، سازندگان تم Avada هدایت می کند. از این رو ، می توانید نتیجه بگیرید که این درخواست مربوط به پوسته Avada یا هر یک از افزونه هایی که همراه آن است نشأت گرفته است.
در چنین شرایطی ، ابتدا باید اطمینان حاصل کنید که پوسته Avada و تمام افزونه های مربوط به آن کاملاً به روز شده اند. اگر با این کار مشکلی برطرف نشد ، می توانید پوسته را غیرفعال کنید و ببینید آیا این مسئله برطرف شده است.
برخلاف غیرفعال کردن افزونه ، غیرفعال کردن یک پوسته در اکثر سناریوها عملی نیست. از این رو، سعی کنید بهینه سازی پوسته را با از بین بردن هرگونه گلوگاه، انجام دهید. همچنین می توانید با تیم پشتیبانی قالب تماس بگیرید تا ببینید آیا آنها می توانند راه حل بهتری را پیشنهاد دهند.
آزمایش یک سایت کند دیگر در GTmetrix منجر به یافتن موارد مشابه مربوط به صفحه ساز ویژوال کامپوزر و افزونه های Notification Bar شد.
خوشبختانه درمورد افزونه ها درصورتیکه مشکل حل نشد، می توانید از افزونه های جایگزین استفاده کنید. به عنوان مثال ، وقتی صحبت از صفحه سازها می شود ، می توانید Beaver Builder یا Elementor را نیز امتحان کنید.
چگونه می توان منشا مصرف بالای منابع admin-ajax.php را تعیین کرد
گاهی اوقات، ممکن است داده های Post و Response در گزارش های تست سرعت چندان واضح و روشن نباشند. در این مواقع، حل مشکل مصرف بالای CPU توسط admin-ajax.php آسان نیست. در چنین مواردی ، همیشه می توانید از روش زیر استفاده کنید.
تمام افزونه های سایت خود را غیرفعال کنید ، حافظه پنهان سایت خود را پاک کنید (در صورت وجود) ، و سپس دوباره تست سرعت را انجام دهید. اگر admin-ajax.phpهنوز وجود دارد ، به احتمال زیاد منشا مربوط به پوسته است. اما اگر بعد از غیرفعال سازی افزونه ها، مشکل حل شد ، باید یکی یکی افزونه ها را فعال کنید و هر بار تست سرعت را انجام دهید. در این صورت می توانید افزونه موردنظر را پیداکنید.
نکته: باتوجه به اینکه با غیرفعال کردن پوسته و افزونه ها، باعث بهم ریختن سایت و تداخل در عملکرد آن می شود و خب از طرفی شما حتما کاربرانی خواهید داشت و این زمان ممکن است زمانبر باشد، بهتر است مراحل گفته شده را در هاست محلی (Localhost) انجام دهید.
حل مشکل admin-ajax.php مربوط به سرور و Back end در کاهش منابع وردپرس
دومین دلیل رایج درمورد استفاده از منابع توسط admin-ajax.php در وردپرس این است که Heartbeat API وردپرس با درخواست های مکرر آژاکسی که ایجاد می کند منجر به استفاده زیاد CPU در سرور می شود. به طور معمول ، این امر به دلیل ورود کاربران زیاد به داشبورد وردپرس ایجاد می شود. از این رو ، این موارد را در تست های سرعت مشاهده نمی کنید.
به طور پیش فرض ، Heartbeat API وردپرس برای ذخیره خودکار نوشته ها، هر ۱۵ ثانیه admin-ajax.php را صدا می زند. اگر از یک هاست اشتراکی استفاده می کنید ،منابع کمی از سرور به سایت شما اختصاص داده می شود. اگر یک پست را ویرایش می کنید و برگه را برای مدت قابل توجهی باز می گذارید ، می تواند بسیاری از درخواست های Admin Ajax را روی هم جمع کند.
به عنوان نمونه، هنگام نوشتن یا ویرایش نوشته ها ، یک کاربر به تنهایی می تواند در عرض یک ساعت ۲۴۰ درخواست ایجاد کند!
این تعداد درخواست فقط برای یک کاربر واردشده به پیشخوان وردپرس است. حالا اگر سایتی چند نویسنده داشته باشد، تعداد این درخواست ها زیاد می شود و قطعا مصرف بالای CPU اتفاق می افتد.
وردپرس این مسئله Heartbeat API را تا حدی رفع کرده است . به عنوان مثال ، می توانید تعداد دفعات درخواست های تولید شده توسط Heartbeat API را روی میزبان با منابع محدود کاهش دهید. همچنین در ویرایشگر وردپرس بعد از یک ساعت عدم فعالیت صفحه کلید / ماوس کامپیوتر یا تاچ موبایل و تبلت، خود را معلق می کند.
استفاده از افزونه Heartbeat Control در کاهش منابع وردپرس
با استفاده از افزونه Heartbeat Control ایجاد شده WP Rocket می توانید این مشکل را به راحتی برطرف کنید . به شما امکان می دهد تنها با چند کلیک فرکانس Heartbeat API را غیرفعال کنید یا تغییر دهید.
با نصب و فعال سازی افزونه Heartbeat Control ، می توانید فرکانس Heartbeat API را بر روی داشبورد وردپرس ، front end سایت و ویرایشگر نوشته، مدیریت کنید.
اگر سرور شما منابع CPU محدودی دارد ، توصیه می کنم Heartbeat Control(ضربان قلب) را هم در داشبورد وردپرس و هم در Frontend غیرفعال کنید . همچنین می توانید فرکانس ضربان قلب را برای گزینه “نوشته” تغییر دهید و آن را به ۳۰ ثانیه (یا حتی ۶۰ ثانیه) افزایش دهید. هرچه فرکانس بالاتر باشد ، صرفه جویی در مصرف منابع سرور بیشتر خواهد بود.
تنظیمات دقیق شما برای استفاده از front end سایت با سایت دیگر متفاوت است. اگر مطمئن نیستید که از چه چیزی استفاده کنید ، می توانید با توسعه دهنده سایت خود مشورت کنید.
مصرف CPU بالا به دلیل حمله DDoS یا ربات های هرزنامه در کاهش منابع وردپرس
حملات DDoS یا ربات های هرزنامه نیز می تواند منجر به استفاده زیاد admin-ajax.php از CPU شود.
اگر سایت شما تحت حمله DDoS قرار دارد ، اولویت شما این است که از یک فایروال قوی مانند Cloudflare یا افزونه وردفنس پرمیوم استفاده کنید.
پیشنهاد می کنم در این رابطه مقاله افزایش امنیت وردپرس را مطالعه کنید.
خلاصه راه حل مشکل مصرف بالای CPU توسط admin-ajax.php
وردپرس برای پیاده سازی بسیاری از ویژگیهای اصلی خود از Ajax در Heartbeat API خود استفاده می کند. با این حال ، اگر به درستی استفاده نشود ، می تواند باعث کاهش سرعت سایت شود. این امر معمولاً به دلیل درخواستهای زیاد admin-ajax.php ایجاد می شود.
در این مقاله ، شما با علل مختلف مصرف زیاد منابع توسط admin-ajax.php ، نحوه تشخیص علت این مشکل و راه حل رفع آن آشنا شدید. در اکثر موارد ، استفاده از این راهنما باعث می شود که سایت شما در کمترین زمان به راحتی و بدون دردسر کار کند.