如何診斷WordPress站點Admin-Ajax使用率過高問題

如何診斷WordPress站點Admin-Ajax使用率過高問題

Ajax是一種基於JavaScript的Web技術,可幫助您構建動態和互動式網站。WordPress使用Ajax為其許多核心管理區域功能提供支援,例如自動儲存文章、使用者會話管理和通知。

預設情況下,WordPress通過admin-ajax.php位於站點/wp-admin目錄中的檔案引導所有Ajax呼叫。

大量同時發生的Ajax請求可能會導致高admin-ajax.php使用率,從而導致伺服器和網站的速度大大降低。這是許多未優化的WordPress網站面臨的最常見問題之一。通常,它表現為網站緩慢或HTTP 5xx錯誤(主要是504502錯誤)。

在本文中,您將瞭解WordPress的admin-ajax.php檔案、它的工作原理、它的優點和缺點,以及如何診斷和修復高admin-ajax.php使用率問題。

  1. admin-ajax.php檔案是什麼?
  2. 如何在WordPress上診斷admin-ajax.php高頻使用問題

admin-ajax.php檔案是什麼?

admin-ajax.php檔案包含在WordPress上路由Ajax請求的所有程式碼。它的主要目的是使用Ajax在客戶端和伺服器之間建立連線。WordPress使用它來重新整理頁面內容而無需重新載入,從而使其動態且與使用者互動。

Admin Ajax如何在WordPress上工作的基本概述

Admin Ajax如何在WordPress上工作的基本概述

由於WordPress核心已經使用Ajax為其各種後端功能提供支援,因此您可以使用相同的功能在WordPress上使用Ajax。您需要做的就是註冊一個操作,將其指向您站點的admin-ajax.php檔案,並定義您希望它如何返回值。您可以將其設定為返回HTML、JSON甚至XML。

WordPress中的admin-ajax.php檔案

WordPress中的admin-ajax.php檔案

根據WordPress Tracadmin-ajax.php檔案首次出現在WordPress 2.1中。它在WordPress開發社羣中也稱為Ajax Admin

 

檢查Ajax使用情況

檢查Ajax使用情況

上面的圖表只顯示了admin-ajax.php請求的數量,而不是它們可能來自哪裡。這是檢視峰值何時發生的好方法。您可以將其與本文中提到的其他技術結合使用,以縮小主要原因。

在Chrome DevTools中檢查admin-ajax.php請求的數量

在Chrome DevTools中檢查admin-ajax.php請求的數量

您還可以使用Chrome DevTools檢視有多少請求被髮送到admin-ajax.php. 您還可以檢視“Network部分下的“Timings選項卡,瞭解處理這些請求所需的時間。

至於admin-ajax.php高使用率背後的確切原因,主要有兩個主要原因:一是前端,二是後端。我們將在下面討論兩者。

如何在WordPress上診斷admin-ajax.php高頻率使用問題

第三方外掛是admin-ajax.php使用率高的最常見原因之一。通常,此問題會出現在站點的前端,並經常出現在速度測試報告中。

但是外掛並不是這裡唯一的罪魁禍首,因為主題、WordPress 核心、網路伺服器DDoS攻擊也可能是Admin Ajax使用率高的原因。

讓我們更詳細地探索它們。

如何確定外掛和主題的admin-ajax.php使用率高的來源

WordPress.org外掛庫中的Ajax驅動外掛

WordPress.org外掛庫中的Ajax驅動外掛

WordPress開發人員經常使用Ajax來建立動態和互動式外掛和主題。一些流行的示例包括新增實時搜尋、產品過濾器、無限滾動、動態購物車和聊天框等功能。

僅僅因為外掛使用Ajax並不意味著它會減慢您的站點的速度

在WebPageTest報告中檢視admin-ajax.php請求

在WebPageTest報告中檢視admin-ajax.php請求

通常,Admin Ajax在頁面載入結束時載入。此外,您可以將Ajax請求設定為非同步載入,因此它對使用者感知的頁面效能幾乎沒有影響。

正如您在上面的WebPageTest報告中看到的admin-ajax.php,在請求佇列的末尾載入,但它仍然需要780毫秒。僅一個請求就需要很多時間。

GTmetrix報告表明admin-ajax.php使用率嚴重飆升

GTmetrix報告表明admin-ajax.php使用率嚴重飆升

當開發人員沒有在WordPress上正確實現Ajax時,可能會導致嚴重的效能問題。上面的GTmetrix報告就是這種行為的一個完美例子。

您還可以使用GTmetrix來挖掘單個文章和響應資料。您可以使用此功能查明導致問題的原因。

為此,請轉到GTmetrix報告的Waterfall選項卡,然後找到並單擊POST admin-ajax.php項。您將看到此請求的三個選項卡:標題、釋出和響應。

POST admin-ajax.php請求的Headers資料

POST admin-ajax.php請求的Headers資料

檢視請求的PostResponse選項卡將為您提供一些提示,以找出效能問題背後的原因。對於此站點,您可以在“Response”選項卡中看到線索。

POST admin-ajax.php請求的響應資料

POST admin-ajax.php請求的響應資料

您可以看到響應的一部分與id設定為“fusion-form-nonce-656”的輸入標籤有關。

快速搜尋這條線索將帶您到ThemeFusion的網站,Avada主題的建立者。因此,您可以得出結論,該請求來自主題,或者與它捆綁的任何外掛。

在這種情況下,您必須首先確保Avada主題及其所有相關外掛已完全更新。如果這不能解決問題,那麼您可以嘗試禁用主題,看看是否可以解決問題。

與禁用外掛不同,在大多數情況下禁用主題是不可行的。因此,嘗試優化主題以消除任何瓶頸。您還可以聯絡主題的支援團隊,看看他們是否可以提出更好的解決方案。

在GTmetrix中測試另一個慢速網站導致發現與Visual Composer頁面構建器和通知欄外掛類似的問題。

另一個POST admin-ajax.php請求的響應資料

另一個POST admin-ajax.php請求的響應資料

POST admin-ajax.php請求的Post資料

POST admin-ajax.php請求的Post資料

值得慶幸的是,如果您無法解決外掛的問題,您最喜歡有許多可供嘗試的替代外掛。例如,當涉及到頁面構建器時,您還可以嘗試使用Beaver Builder或Elementor。

如何確定admin-ajax.php高使用率的來源

有時,速度測試報告中顯示的Post和Response資料可能並不那麼清晰和直接。在這裡,找到高admin-ajax.php使用率的來源並不容易。在這種情況下,你總是可以用老派的方式來做。

禁用您網站的所有外掛,清除您網站的快取(如果有),然後再次執行速度測試。如果admin-ajax.php仍然存在,那麼最有可能的罪魁禍首是主題。但是如果找不到,那麼你必須一個一個地啟用每個外掛並每次執行速度測試。通過消除過程,您將鎖定問題的根源。

使用admin-ajax.php診斷後端伺服器問題

admin-ajax.php高使用率的第二個最常見原因是WordPress Heartbeat API生成頻繁的Ajax呼叫,導致伺服器上的CPU使用率高。通常,這是由於許多使用者登入到WordPress後端儀表盤造成的。因此,您不會在速度測試中看到這一點。

預設情況下,Heartbeat API的admin-ajax.php每15秒輪詢一次檔案以自動儲存文章或頁面。如果您使用的是共享託管伺服器,那麼您的站點專用的伺服器資源並不多。如果您正在編輯帖子或頁面並長時間開啟選項卡,則可能會產生大量Admin Ajax請求。

例如,當您撰寫或編輯文章時,僅一個使用者就可以在一小時內生成240個請求!

頻繁自動儲存admin-ajax.php請求

頻繁自動儲存admin-ajax.php請求

後端有很多請求,只有一個使用者。現在想象一個有多個編輯器同時登入的站點。這樣的站點可以快速增加Ajax請求,從而產生高CPU 使用率。

DARTDRones擴充套件其WooCommerce網站以在Shark Tank上露面時實際上遇到了這個問題。

他們的admin-ajax.php在一天內接到了4,100多個電話,只有2,000名獨立訪客。這是一個微弱的請求訪問比率。

dartdrones.com上大量使用admin-ajax.php

dartdrones.com上大量使用admin-ajax.php

我們注意到/wp-admin引用URL並正確確定了根本原因。這些請求是由於DARTDRones的管理員和編輯經常更新網站以期待節目的播出。

WordPress很久以前就部分修復了這個Heartbeat API問題。例如,您可以在資源有限的主機上減少Heartbeat API生成的請求頻率。它還會在鍵盤/滑鼠/觸控不活動一小時後自行暫停。

使用Heartbeat Control Plugin減少Ajax請求

您可以使用WP Rocket的Heartbeat Control外掛輕鬆解決此問題。它允許您只需點選幾下即可禁用或修改Heartbeat API的頻率。

Heartbeat Control外掛

Heartbeat Control外掛

安裝並啟用Heartbeat Control外掛後,您可以在WordPress儀表盤、站點前端和文章編輯器上管理Heartbeat API的頻率。

Heartbeat Control外掛的“常規設定”儀表盤

Heartbeat Control外掛的“常規設定”儀表盤

如果您的伺服器CPU資源有限,我建議您在WordPress儀表板和前端都Disable Heartbeat。您還可以修改“文章編輯器”選項的Heartbeat頻率並將其增加到30秒(甚至60秒)。頻率越高,使用的伺服器資源節省的越多。

您必須使用的確切設定因站點而異。如果您不確定要使用什麼,您可以諮詢您的Web開發人員。

由於DDoS攻擊或垃圾郵件機器人導致的高流量

用DDoS攻擊或垃圾郵件機器人淹沒您的網站也會導致高admin-ajax.php使用率。但是,此類攻擊不一定針對增加的Admin Ajax請求。這只是附帶損害。

如果您的站點受到DDoS攻擊,您的首要任務應該是將其置於強大的CDN/WAF之後,例如CloudflareSucuri

要詳細瞭解如何保護您的網站免受此類惡意攻擊,您可以參考我們關於如何阻止DDoS攻擊的深入指南

小結

WordPress在其Heartbeat API中使用Ajax來實現其許多核心功能。但是,如果使用不當,它可能會導致載入時間增加。這通常是由於對檔案的高頻率請求造成的admin-ajax.php

在本文中,您瞭解了高admin-ajax.php使用率的各種原因、如何診斷導致此症狀的原因以及如何修復它。在大多數情況下,遵循本指南應該可以讓您的網站立即恢復並順利執行。

但是,在某些情況下,升級到具有更高資源的伺服器是唯一可行的解​​決方案。特別是對於要求苛刻的用例,例如電子商務和會員網站。如果您正在執行這樣的站點,請考慮升級到在處理這些型別的效能問題方面經驗豐富的託管WordPress主機。

評論留言