在選擇託管計劃時,選擇最符合您的WordPress網站需求的計劃非常重要。
例如,一個每月有50,000名訪問者的電子商務網站通常比具有相同流量的簡單部落格對資源的要求要高得多。
這僅僅是因為電子商務網站本質上通常是動態的,並且需要更多資源用於PHP和資料庫查詢。
這就是PHP worker發揮作用的地方。閱讀下文,瞭解PHP worker是什麼以及如何使用它們來加快您網站上請求的處理速度。
- 什麼是PHP worker?
- WordPress如何使用PHP Workers?
- PHP Worker與CPU的關係
- 如何優化您網站的PHP Worker使用
- PHP Workers不足的後果
- 估計所需PHP workers的數量
什麼是PHP worker?
在WordPress的上下文中,PHP worker構建頁面、處理計劃的後臺任務等等。由於PHP worker直接負責生成HTML頁面以提供給您網站的訪問者,因此他們決定了您的網站在任何給定時間可以同時處理多少個未快取的請求。
例如,假設您的WordPress站點配備了兩個PHP workers,並且沒有設定頁面快取。如果四個請求同時到達您的站點,則其中兩個請求將立即得到處理,而另外兩個則必須在佇列中等待,直到前兩個請求完成處理。
儘管我們實現了伺服器級快取,但對於繞過或丟失快取的請求,PHP workers變得非常重要,因為他們必須為每個請求工作。
通常我們會在電子商務和社羣論壇網站上看到很多未快取的請求。因此,這些站點將需要額外的PHP workers來確保處理每個請求而不會出現延遲或超時。
如果您的網站經過高度優化或沒有大量PHP程式碼(例如複雜的主題或大量WordPress外掛),那麼處理每個請求應該幾乎立即發生。即使有2個PHP workers和4個請求,所有4個請求都將很快得到處理。
簡單地說,PHP workers是執行PHP程式碼的伺服器上的後臺程序。
WordPress如何使用PHP Workers?
在我們討論如何優化WordPress的PHP worker使用之前,我們必須首先了解WordPress如何使用PHP worker。
未快取環境中的典型請求如下所示:
- Web伺服器(Nginx或Apache)接收來自訪問者的請求。
- Nginx將請求傳遞給PHP。
- PHP根據需要查詢MySQL資料庫並使用主題的PHP模板生成HTML頁面。
- PHP將呈現的HTML頁面交還給Web伺服器。
- 該頁面提供給訪問者。
在上面突出顯示的過程中,第3步是最耗費時間和資源的(CPU和RAM)。具有最少資料庫查詢和高效PHP程式碼的高度優化的站點將相對較快地完成第三步。
相反,一個編寫糟糕的PHP程式碼並進行大量不必要的資料庫查詢的站點將花費更多的時間來完成第3步,這意味著請求將佔用PHP worker更長的時間。
PHP Worker與CPU的關係
當談到WordPress效能時,PHP worker和可用CPU之間的關係是一個需要考慮的重要因素。
如果CPU資源不足是您網站的瓶頸,那麼增加PHP worker的數量不會提高您網站的效能——它只會讓您的網站同時處理更多請求,而每個請求的效能會降低。
讓我解釋。
想象一個帶有一根軟管的消防栓。只需連線一根軟管,消火栓就能提供足夠的水壓。現在,如果我們將十根軟管連線到消火栓上會發生什麼?
有限的水壓分佈在十根軟管上,這意味著每根單獨的軟管完成工作所需的水壓較小。在這個類比中,消火栓是CPU,軟管是PHP worker。
考慮到上述情況,如果您的主機不斷建議您增加PHP worker而沒有提及CPU,您應該小心。
讓我們暫時回到消防栓的比喻。
想象一下,您需要用5根軟管撲滅10場火災。連線所有五根軟管後,您會意識到消火栓仍在提供足夠的水壓。
在這種情況下,連線更多軟管是有意義的,因為消火栓的水壓不是瓶頸。
同樣,如果您的站點在CPU和RAM開銷充足的情況下表現不佳,那麼您應該考慮增加PHP worker的數量作為提高效能的一種選擇。
如何優化您網站的PHP Worker使用
我們已經解釋過PHP workers是使用PHP程式碼生成HTML頁面的後臺程序。現在,減少和優化PHP workers使用的最明顯方法是減少滿足對您的站點的請求所需的CPU和PHP資源量。
這是如何做到的。
1. 為您的WordPress網站設定快取
減少PHP worker使用的第一步是為您的WordPress站點設定快取層。預設情況下,WordPress是一個動態CMS,可以按需滿足每個頁面請求。
對於部落格、線上雜誌和作品集等許多網站,使用PHP為每個請求動態生成頁面是不必要的。
頁面快取
您當前正在閱讀的部落格文章是不需要動態生成的頁面的完美示例。與我們的許多其他文章一樣,此文章中的內容被設計為靜態的,因此無需花費CPU資源來連續生成相同的頁面。
相反,最好讓PHP生成一次頁面然後快取它。與使用PHP動態生成頁面相比,頁面快取具有許多明顯的優勢。
例如,想象一下,如果您網站上的部落格文章在釋出後的幾個小時內傳播開來並獲得100,000次頁面瀏覽量。如果沒有頁面快取,您的PHP worker可能會不堪重負,您的伺服器可能會崩潰。
使用頁面快取,只會動態生成首頁檢視。其他99,999個請求將從您的頁面快取中提供服務,該快取使用相對較少的CPU資源。
有兩種方法可以為您的WordPress網站設定頁面快取。
- 使用Nginx等Web伺服器進行伺服器級頁面快取。
- 使用WP-Rocket等WordPress外掛進行基於外掛的頁面快取。
為了獲得最佳效能,我們建議儘可能使用伺服器級頁面快取,比如使用Nginx的FastCGI快取模組以獲得超快的效能。
如果您的主機不提供伺服器級頁面快取選項,則下一個最佳選擇是使用WordPress快取外掛在應用程式級別實現頁面快取。
物件快取
對於無法有效利用頁面快取的WooCommerce商店、社羣論壇和其他WordPress站點,在MySQL資料庫前新增像Redis這樣的持久物件快取可以提高效能並減少 PHP worker的負載。
如果沒有持久物件快取,MySQL資料庫查詢將為每個請求執行,即使結果與前一個查詢相同。
例如,繞過頁面快取的社羣論壇站點將對資料庫進行單獨的相同查詢以獲取帖子資料以構建頁面。
對於高流量和大量資料庫的站點,這種查詢資料庫的方法效率低下,因為它使用PHP worker為單獨的請求生成相同的查詢結果。這就是Redis的用武之地。
Redis將資料庫查詢的結果儲存在RAM中,這允許PHP抓取已經執行的查詢結果。這種物件快取方法允許PHP worker節省CPU資源並花費更少的時間來完成請求,因為它消除了重複資料庫查詢的需要。
2. 優化你的PHP程式碼
除了設定頁面快取之外,另一個可以幫助您減少PHP worker使用的策略是優化您的PHP程式碼。在WordPress的上下文中,“優化PHP程式碼”可能意味著各種不同的東西,所以讓我們更深入地瞭解一下。
WordPress最受歡迎和最討厭的功能之一(取決於你問誰)是它通過外掛和程式碼片段的可擴充套件性。
如果您想向您的WordPress網站新增股票行情小部件,可以使用外掛。同樣,如果您想新增自定義字型,也有一個functions.php
程式碼片段。
使用附加功能擴充套件WordPress核心變得如此容易,以至於我們經常過火而沒有考慮對網站效能的潛在影響。
因此,優化PHP程式碼的第一種方法是執行站點範圍的稽覈,以確定哪些外掛和程式碼片段是真正需要的。
選擇優質外掛
通常情況下,WordPress網站上的外掛數量並不像外掛的質量那麼重要。如果外掛在過去六個月內沒有更新,我們建議選擇另一個符合要求的外掛。
這樣做的原因是WordPress正在不斷改進。如果一個外掛多年沒有更新,很可能它的程式碼沒有使用最新的WordPress開發和安全最佳實踐。
相反,如果外掛每隔幾周不斷更新,那麼開發人員很可能會認真對待質量,這使其成為您的WordPress網站的不錯選擇。
僅在需要時使用外掛
如果您希望在您的網站上執行一項簡單的任務,例如新增JavaScript或CSS,那麼您並不總是需要外掛。相反,您可以將程式碼直接新增到主題的PHP模板或帶有子主題的style.css
檔案中。
下次當您考慮安裝外掛時,請先花一些時間看看它是否100%必要。有時,沒有辦法安裝另一個外掛,這沒關係。其他時候,您可以通過不安裝不必要的外掛來避免新增額外的程式碼膨脹。
選擇輕量級主題
根據我們監控數千個WordPress網站的經驗,我們發現主題偶爾會導致PHP效能不佳。為了迎合WordPress作為通用CMS的多功能性,一些開發人員對主題進行編碼以適用於各種用例。
通常,這會導致程式碼繁重且臃腫的主題無法有效地使用PHP和資料庫查詢。
當建立一個WordPress站點,它是重要的選擇一個主題,這是最高效的,可定製的- GeneratePress,OceanWP和Astra有三個例子。
3. 選擇一個注重效能的WordPress主機
信不信由你,選擇正確的WordPress主機會對您網站的效能產生巨大影響。由於PHP worker的效率與CPU和RAM直接相關,因此將您的網站託管在具有最新硬體的現代伺服器上可以幫助您優化 PHP 工作者的使用。
以下是兩個示例,說明為什麼選擇以效能為中心的主機對您的WordPress網站很重要。
高效能CPU
PHP使用CPU資源來執行程式碼。更快的CPU意味著更快的程式碼執行。
快速SSD儲存
磁碟I/O速度會對程式碼執行和資料庫查詢產生直接影響。如果您的資料庫儲存在速度較慢的機械磁碟或基於雲的SSD上而沒有足夠的IOPS(每秒輸入/輸出操作),您的 PHP 工作人員將被迫花費更多時間來滿足請求。
4. 與績效專家合作(可選)
如果您不確定如何解決網站上的效能問題,我們建議您與合格的效能專家合作來診斷問題。
專家可以通過使用New Relic或WordPress外掛Query Monitor等高階監控工具來幫助您識別程式碼中的特定瓶頸。
通過放大和檢查單個PHP程序和資料庫查詢,可以識別給您網站的PHP worker帶來高負荷的特定程式碼塊及其相關功能。
總結PHP worker優化,請記住以下提示。
- CPU和RAM應該與PHP worker一起擴充套件。如果CPU使用率鎖定在100%,新增更多PHP workers不會提高效能。
- 使用注重效能的主機託管您的網站可以解決許多效能問題。
- 頁面快取和物件快取可以顯著減少PHP工作負載。
- 使用優質的WordPress外掛和主題可以減少您網站上不必要的程式碼膨脹量。
- 如有必要,請與效能專家合作以識別和解決複雜問題。
PHP Workers不足的結果
為了讓您的WordPress網站獲得快速可靠的效能,確保它有足夠的PHP workers非常重要。當PHP worker已經在一個站點上忙碌時,他們開始建立一個佇列。
一旦達到PHP worker的限制,佇列就會開始推出較舊的請求,這可能導致504錯誤或不完整的請求。
由於缺少PHP worker,我們看到的另一個常見錯誤是502 bad gateway errors。這些與504錯誤略有不同,因為錯誤發生在PHP工作佇列中的60秒超時之後。
這些錯誤不僅會給訪問者帶來糟糕的使用者體驗,還會對您網站的SEO產生負面影響。
502(錯誤閘道器)錯誤
有許多不同的因素會導致頁面載入緩慢或錯誤。例如,如果未快取的請求需要來自資料庫的大量資料,則生成的查詢可能需要20-30秒才能完成。
在這種情況下,一個PHP worker至少會被佔用半分鐘。如果您的站點只有兩個PHP worker,那麼這些長請求中的兩個或三個就足以開始導致錯誤。
為了解決這個問題,優化MySQL資料庫並在CPU尚未達到極限的情況下增加PHP worker可以提高效能。
估計所需PHP worker的數量
一般來說,以靜態內容為主的站點——文章、靜態頁面和作品集——不需要很多PHP worker。
對於具有更多動態功能(如電子商務或論壇)的大型WordPress網站,我們發現4個PHP worker是一個很好的起點。但是,這可能因站點而異,因為每個站點都有自己獨特的一組主題、外掛、資料庫查詢和快取與未快取的比率。
在某些情況下,可能需要更多的PHP worker才能獲得快速和可靠的效能。
PHP Worker限制圖表
部分主機服務商會提供PHP worker限制圖表可讓您檢視PHP引擎在其錯誤日誌中報告達到最大分配worker數量的次數。此圖表可以幫助您衡量效能優化是否會影響您的PHP worker使用情況。
頂級快取繞過
例如,如果您將站點的PHP版本從5.6切換到7.4,您可能會看到PHP worker限制下降,因為PHP 7.4比5.6快得多。
同樣,如果您與效能專家合作修復長資料庫查詢並切換到更輕量級的主題,您可以使用PHP worker限制圖表檢視優化前後的差異。
快取分析圖
您還可以使用伺服器提供商的快取分析報告(如果有)來確定快取命中、繞過、未命中和過期的數量。在優化您的網站對PHP worker的使用時,此資料可能特別有用。
使用查詢字串繞過快取
預設情況下,帶有查詢字串的URLhttps://kinstalife.com/?query=123
會繞過頁面快取。在某些情況下,查詢字串可能會導致不必要的PHP和CPU使用率大幅上升。
例如,如果您訪問Facebook的連結,您通常會在URL的末尾看到查詢字串?fbclid=
。同樣,單擊電子郵件通訊中的連結後,您可能會看到UTM跟蹤引數。
帶有查詢字串 (?querystring=123) 的URL
如果您網站上的帖子病毒式傳播,並且不斷通過查詢字串訪問,您將能夠使用快取分析報告識別特定URL。
使用該關鍵資訊,您可以強制快取該特定URL,以減少PHP worker的負載。
識別資源密集型外掛
在某些情況下,快取分析圖還可用於識別資源密集型外掛和程序。
例如,如果您看到頂部快取繞過URL指向特定外掛目錄中的檔案,則該外掛很可能是導致PHP worker使用率高的原因。
如果您在快取繞過列表中看到大量與外掛相關的請求,您可以與開發人員合作解決問題或切換到使用較少資源的外掛。
小結
維護快速WordPress網站的目標是最大限度地提高後端的效率。當通過在worker數量、CPU使用率和程式碼優化之間找到平衡來正確利用PHP worker時,WordPress可以成為一個非常高效能的CMS。
評論留言