Ajax是一種基於JavaScript的Web技術,可幫助您構建動態和互動式網站。WordPress使用Ajax為其許多核心管理區域功能提供支援,例如自動儲存文章、使用者會話管理和通知。
預設情況下,WordPress通過admin-ajax.php
位於站點/wp-admin
目錄中的檔案引導所有Ajax呼叫。
大量同時發生的Ajax請求可能會導致高admin-ajax.php
使用率,從而導致伺服器和網站的速度大大降低。這是許多未優化的WordPress網站面臨的最常見問題之一。通常,它表現為網站緩慢或HTTP 5xx錯誤(主要是504或502錯誤)。
在本文中,您將瞭解WordPress的admin-ajax.php
檔案、它的工作原理、它的優點和缺點,以及如何診斷和修復高admin-ajax.php
使用率問題。
admin-ajax.php檔案是什麼?
admin-ajax.php
檔案包含在WordPress上路由Ajax請求的所有程式碼。它的主要目的是使用Ajax在客戶端和伺服器之間建立連線。WordPress使用它來重新整理頁面內容而無需重新載入,從而使其動態且與使用者互動。
Admin Ajax如何在WordPress上工作的基本概述
由於WordPress核心已經使用Ajax為其各種後端功能提供支援,因此您可以使用相同的功能在WordPress上使用Ajax。您需要做的就是註冊一個操作,將其指向您站點的admin-ajax.php
檔案,並定義您希望它如何返回值。您可以將其設定為返回HTML、JSON甚至XML。
WordPress中的admin-ajax.php檔案
根據WordPress Trac,admin-ajax.php檔案首次出現在WordPress 2.1中。它在WordPress開發社羣中也稱為Ajax Admin。
檢查Ajax使用情況
上面的圖表只顯示了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開發人員經常使用Ajax來建立動態和互動式外掛和主題。一些流行的示例包括新增實時搜尋、產品過濾器、無限滾動、動態購物車和聊天框等功能。
僅僅因為外掛使用Ajax並不意味著它會減慢您的站點的速度。
在WebPageTest報告中檢視admin-ajax.php請求
通常,Admin Ajax在頁面載入結束時載入。此外,您可以將Ajax請求設定為非同步載入,因此它對使用者感知的頁面效能幾乎沒有影響。
正如您在上面的WebPageTest報告中看到的admin-ajax.php
,在請求佇列的末尾載入,但它仍然需要780毫秒。僅一個請求就需要很多時間。
GTmetrix報告表明admin-ajax.php使用率嚴重飆升
當開發人員沒有在WordPress上正確實現Ajax時,可能會導致嚴重的效能問題。上面的GTmetrix報告就是這種行為的一個完美例子。
您還可以使用GTmetrix來挖掘單個文章和響應資料。您可以使用此功能查明導致問題的原因。
為此,請轉到GTmetrix報告的Waterfall選項卡,然後找到並單擊POST admin-ajax.php項。您將看到此請求的三個選項卡:標題、釋出和響應。
POST admin-ajax.php請求的Headers資料
檢視請求的Post和Response選項卡將為您提供一些提示,以找出效能問題背後的原因。對於此站點,您可以在“Response”選項卡中看到線索。
POST admin-ajax.php請求的響應資料
您可以看到響應的一部分與id設定為“fusion-form-nonce-656”的輸入標籤有關。
快速搜尋這條線索將帶您到ThemeFusion的網站,Avada主題的建立者。因此,您可以得出結論,該請求來自主題,或者與它捆綁的任何外掛。
在這種情況下,您必須首先確保Avada主題及其所有相關外掛已完全更新。如果這不能解決問題,那麼您可以嘗試禁用主題,看看是否可以解決問題。
與禁用外掛不同,在大多數情況下禁用主題是不可行的。因此,嘗試優化主題以消除任何瓶頸。您還可以聯絡主題的支援團隊,看看他們是否可以提出更好的解決方案。
在GTmetrix中測試另一個慢速網站導致發現與Visual Composer頁面構建器和通知欄外掛類似的問題。
另一個POST admin-ajax.php請求的響應資料
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請求
後端有很多請求,只有一個使用者。現在想象一個有多個編輯器同時登入的站點。這樣的站點可以快速增加Ajax請求,從而產生高CPU 使用率。
DARTDRones擴充套件其WooCommerce網站以在Shark Tank上露面時實際上遇到了這個問題。
他們的admin-ajax.php
在一天內接到了4,100多個電話,只有2,000名獨立訪客。這是一個微弱的請求訪問比率。
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外掛後,您可以在WordPress儀表盤、站點前端和文章編輯器上管理Heartbeat API的頻率。
Heartbeat Control外掛的“常規設定”儀表盤
如果您的伺服器CPU資源有限,我建議您在WordPress儀表板和前端都Disable Heartbeat。您還可以修改“文章編輯器”選項的Heartbeat頻率並將其增加到30秒(甚至60秒)。頻率越高,使用的伺服器資源節省的越多。
您必須使用的確切設定因站點而異。如果您不確定要使用什麼,您可以諮詢您的Web開發人員。
由於DDoS攻擊或垃圾郵件機器人導致的高流量
用DDoS攻擊或垃圾郵件機器人淹沒您的網站也會導致高admin-ajax.php
使用率。但是,此類攻擊不一定針對增加的Admin Ajax請求。這只是附帶損害。
如果您的站點受到DDoS攻擊,您的首要任務應該是將其置於強大的CDN/WAF之後,例如Cloudflare或Sucuri。
要詳細瞭解如何保護您的網站免受此類惡意攻擊,您可以參考我們關於如何阻止DDoS攻擊的深入指南。
小結
WordPress在其Heartbeat API中使用Ajax來實現其許多核心功能。但是,如果使用不當,它可能會導致載入時間增加。這通常是由於對檔案的高頻率請求造成的admin-ajax.php
。
在本文中,您瞭解了高admin-ajax.php
使用率的各種原因、如何診斷導致此症狀的原因以及如何修復它。在大多數情況下,遵循本指南應該可以讓您的網站立即恢復並順利執行。
但是,在某些情況下,升級到具有更高資源的伺服器是唯一可行的解決方案。特別是對於要求苛刻的用例,例如電子商務和會員網站。如果您正在執行這樣的站點,請考慮升級到在處理這些型別的效能問題方面經驗豐富的託管WordPress主機。
評論留言