wordpress

بالا بودن زمان لود سایت در لود admin-ajax.php

افزایش سرعت وردپرس در admin-ajax.php

گاهی سرعت لود سایت بالا است و فایل هایی مشابه زیر را در inspect مشاهده می کنید.


wp-admin/admin-ajax.php
wp-admin/admin-ajax.php?action=tm_compare_get_fragments
?wc-ajax=get_refreshed_fragments

راهکار رفع مشکل کندی وردپرس به علت فایل admin-ajax.php چیست؟

 

مشکل admin-ajax.php?action=tm_compare_get_fragments معمولاً به یکی از این موارد مربوط می‌شود:

  1. تداخل افزونه‌ها (Plugins Conflict)

    • بررسی کنید که آیا افزونه‌ای باعث ایجاد مشکل شده است. برای این کار، همه افزونه‌ها را غیرفعال کنید و سپس یکی‌یکی فعال کنید تا افزونه‌ی مشکل‌ساز را پیدا کنید.
  2. مشکل در قالب (Theme Conflict)

    در بسیار از موارد مشکل از قالب سایت می باشد

    • قالب را به یکی از قالب‌های پیش‌فرض وردپرس (مثلاً Twenty Twenty-Four) تغییر دهید و بررسی کنید که آیا مشکل برطرف می‌شود یا نه.
  3. کش (Cache) و بهینه‌سازها

    • اگر از افزونه‌های کش یا بهینه‌سازی (مثل WP Rocket، LiteSpeed Cache و…) استفاده می‌کنید، آن‌ها را غیرفعال کنید و کش را پاک کنید.
  4. مشکلات AJAX و JavaScript در مرورگر

    • در کنسول مرورگر (F12 → Console) بررسی کنید که آیا خطایی در درخواست AJAX وجود دارد.
  5. عدم بارگذاری صحیح admin-ajax.php

    • بررسی کنید که آیا فایل admin-ajax.php به‌درستی در دسترس است. می‌توانید لینک مستقیم آن را در مرورگر باز کنید:
      yourwebsite.com/wp-admin/admin-ajax.php

      اگر با خطای 403 یا 500 مواجه شدید، احتمالاً مشکل از مجوزها (Permissions) یا قوانین .htaccess است.

  6. مشکل در فایل .htaccess

    • فایل .htaccess را به حالت پیش‌فرض وردپرس بازگردانید و تست کنید.
  7. بررسی لاگ‌های خطا

    • در هاست خود به لاگ‌های error_log نگاه کنید تا ببینید آیا ارور خاصی ثبت شده است.
  8. مشکل در تنظیمات ووکامرس یا افزونه مقایسه

    • اگر این مشکل مربوط به قابلیت مقایسه محصولات در ووکامرس است، بررسی کنید که آیا افزونه‌ی WooCommerce TM Extra Product Options یا سایر افزونه‌های مقایسه به‌درستی تنظیم شده‌اند.

برای شناسایی افزونه‌هایی که باعث افزایش بار روی admin-ajax.php می‌شوند، می‌توانید از روش‌های زیر استفاده کنید:


1. بررسی درخواست‌های AJAX در مرورگر

🔹 مرورگر را باز کنید و به صفحه‌ای که کند اجرا می‌شود بروید.
🔹 کلید F12 را بزنید و به تب Network بروید.
🔹 در قسمت فیلتر، admin-ajax.php را جستجو کنید.
🔹 بررسی کنید که کدام درخواست بیشترین زمان را می‌گیرد و از چه افزونه‌ای می‌آید.


2. استفاده از Query Monitor

📌 Query Monitor یک افزونه عالی برای بررسی درخواست‌های AJAX است.

✅ پس از نصب:

  1. به داشبورد وردپرس بروید.
  2. در نوار مدیریت (Admin Bar)، روی Query Monitor کلیک کنید.
  3. به تب AJAX Calls بروید و ببینید کدام افزونه بیشترین درخواست را ارسال می‌کند.

3. بررسی Logهای سرور

اگر به error_log یا access_log هاست خود دسترسی دارید، می‌توانید تعداد و نوع درخواست‌های AJAX را بررسی کنید.

🔹 در SSH یا cPanel → File Manager مسیر زیر را چک کنید:

/var/log/apache2/access.log
/var/log/nginx/access.log

🔹 این دستور در SSH به شما بیشترین درخواست‌های admin-ajax.php را نشان می‌دهد:

grep "admin-ajax.php" /var/log/apache2/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -20

4. استفاده از افزونه WP Control

📌 WP Control به شما اجازه می‌دهد کرون‌جاب‌های وردپرس را بررسی کنید. گاهی بعضی افزونه‌ها درخواست‌های AJAX غیرضروری اجرا می‌کنند.

✅ بعد از نصب:

  1. به Tools → Cron Events بروید.
  2. ببینید آیا کرون‌جاب‌های مشکوکی وجود دارد که در فواصل کوتاه اجرا می‌شوند.

5. غیرفعال‌سازی افزونه‌ها به‌صورت دستی

🚀 اگر نمی‌توانید افزونه‌ی مشکل‌ساز را پیدا کنید، روش تست دستی این است:

  1. همه افزونه‌ها را غیرفعال کنید.
  2. یکی‌یکی فعال کنید و در هر مرحله admin-ajax.php را بررسی کنید.
  3. افزونه‌ای که باعث افزایش بار می‌شود را شناسایی کنید.

6. جلوگیری از درخواست‌های AJAX غیرضروری

پس از شناسایی پلاگین‌های مشکل‌ساز، می‌توانید:
✅ افزونه‌های جایگزین کم‌مصرف‌تر پیدا کنید.
✅ درخواست‌های AJAX را با کش (مثل WP Rocket یا LiteSpeed Cache) بهینه کنید.
✅ اگر درخواست‌های AJAX برای بروزرسانی تعداد سبد خرید ووکامرس زیاد است، cart fragments را غیرفعال کنید:

add_action('wp_enqueue_scripts', function() {
wp_dequeue_script('wc-cart-fragments');
}, 11);

7. افزونه Heartbeat Control

افزونه Heartbeat Control می‌تواند تأثیر قابل‌توجهی در کاهش بار admin-ajax.php داشته باشد، زیرا وردپرس به‌صورت پیش‌فرض از Heartbeat API برای ارسال درخواست‌های AJAX در پس‌زمینه استفاده می‌کند. این درخواست‌ها در پیشخوان وردپرس (Dashboard)، ویرایشگر نوشته‌ها و فرانت‌اند سایت اجرا می‌شوند.


Heartbeat API چیست و چرا مشکل‌ساز می‌شود؟

📌 Heartbeat API وظایفی مثل ذخیره خودکار نوشته‌ها، قفل کردن ویرایشگر و همگام‌سازی فعالیت‌های داشبورد را انجام می‌دهد.
🚀 اما برخی افزونه‌ها از آن برای ارسال درخواست‌های زیاد به admin-ajax.php استفاده می‌کنند که باعث افزایش مصرف CPU و کاهش سرعت سایت می‌شود.


نحوه تنظیم Heartbeat Control برای کاهش بار

1️⃣ نصب و فعال‌سازی افزونه
🔗 Heartbeat Control Plugin

2️⃣ پیکربندی افزونه
پس از فعال‌سازی، به مسیر زیر بروید:
Settings → Heartbeat Control

3️⃣ تنظیمات پیشنهادی:

  • Dashboard: روی Disable بگذارید (مگر اینکه نیاز به به‌روزرسانی زنده داشبورد داشته باشید).
  • Post Editor: مقدار را روی 60s یا 120s تنظیم کنید (برای جلوگیری از بار زیاد هنگام ویرایش).
  • Frontend: اگر استفاده خاصی ندارید، روی Disable بگذارید.

4️⃣ ذخیره تغییرات و بررسی تاثیر آن
حالا در مرورگر Network → admin-ajax.php را بررسی کنید. باید تعداد درخواست‌های AJAX کاهش یافته باشد.


جایگزین: غیرفعال‌سازی Heartbeat API بدون افزونه

اگر نمی‌خواهید افزونه نصب کنید، می‌توانید کد زیر را در functions.php قالب خود قرار دهید:

add_action'init', function() {
wp_deregister_script('heartbeat');
}, 1 );

🔹 این کد Heartbeat API را کاملاً غیرفعال می‌کند.
🔹 اگر فقط می‌خواهید آن را کند کنید، از این کد استفاده کنید:

add_filter'heartbeat_settings', function( $settings ) {
$settings['interval'] = 60// تنظیم فاصله زمانی به 60 ثانیه
return $settings;
});

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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