按此:與 Alain Schlesser 合作的 WP-CLI 的向後兼容性難題

已發表: 2022-05-17

歡迎來到來自 WMR 的 WordPress 社區播客 Press This。 在這裡,主持人 David Vogelpohl 與來自社區的客人坐下來討論 WordPress 開發人員面臨的最大問題。 以下是原錄音的抄錄。

由 RedCircle 提供支持

David Vogelpohl:大家好,歡迎來到 WMR 上的 WordPress 社區播客 Press This。 這是您的主持人,David Vogelpohl,我通過我在 WP Engine 的角色來支持 WordPress 社區,我喜歡將最好的社區帶給您,每週在新聞上聽到這個提醒,您可以在 Twitter @wpdavidv 上找到我,或者您可以在 iTunes、iHeartRadio、Spotify 上訂閱按此,或在 wmr.fm 下載最新劇集。 在這一集中,我們將討論與 WP CLI 的向後兼容的兼容性連接器。 加入我們這次談話的人是對 WP CLI 相當了解的人。 我們是 XMPP 的 WP CLI 的貢獻者 我想歡迎 Alain Schlesser。 阿蘭,歡迎按此。

阿蘭·施萊瑟:大衛。 你好。 很高興來到這裡。

DV:很高興有你。 這至少是你第二次參加這個節目了。 多年來,我們一直在向您詢問有關 WP CLI 的問題,我真的很高興有您參與。 對於那些聽。 WP CLI 是 WordPress 生態系統的重要組成部分,特別是圍繞自動化和工作流程以及 WordPress 構建的其他方面,我們今天要介紹的是對去年 BPCL AI 所取得成就的想法。 什麼向後兼容性變化擺在面前。 您知道向後兼容性是 WordPress 優勢的重要組成部分,但也是軟件開發人員面臨的挑戰,當然還有這些挑戰是如何解決的,並且大部分人都分享了一些關於您最終可以為 WP CLI 做出貢獻的方式。 所以我真的很期待面試。 所以接下來我會問你同樣的問題,我問每一位客人,我以前問過你這個問題,但如果可以的話,我希望你再說一遍。 你能告訴我你的 WordPress 起源故事嗎? 您第一次使用 WordPress 是什麼時候?

AS:嗯,是的,所以我的起源故事就像大多數 WordPress 故事一樣,都是從一個較小的彎路開始的。 我在盧森堡擔任政府代理人。 在某一時刻,我真的厭倦了一切的政治。 我想在我的生活中做點別的事情並嘗試不同的職業。 我決定做自由職業者開發,因為我之前已經做過開發,但從未以自由職業者的身份做過。 當到了真正決定關注什麼的時候,我只是看看那裡有什麼以及曾經擁有最大市場份額的東西。 眾所周知,這恰好是 WordPress。 我剛開始使用 WordPress 開發,因為我認為作為一個從 0 開始的新自由職業者,這是最容易獲得客戶的。

DV:我選擇 WordPress 作為首選平台的原因與我記得我在 Drupal 和 WordPress 之間的一個偉大的代理機構相同的原因,我認為當時 Drupal 是正確的選擇,但這並不是人們所說的哦,但這是 2010 年,你知道,就在自定義帖子類型和元字段的風口浪尖。 我只是想知道你是什麼時候做出這個決定的

AS:嗯,那是 2014 年的一些 2014 年,我認為 WordPress 大約是 332 版或類似的版本。 我不敢說實話。

DV:所以對於作為自由開發者的你來說,自定義帖子網站的好處已經被釋放了。 所以你有點走進這個生態系統並看到了這些能力。 不過,WP CLI 還需要兩年時間。 所以我猜它並沒有完全滿足您作為開發人員所需的一切,但很高興看到您現在管理該項目。 現在,了解您確實使用 XMPP。 我們會告訴我 XMPP 做什麼以及你在那裡做什麼。

AS :所以 X Delta P 是一家專注於高性能企業級 WordPress 項目的機構。 主要關注的是性能,但不僅僅是網站加載的速度,還有它如何滿足您的業務。 我和 XWP 一起工作了大約兩年半,在那段時間裡,我一直在研究 amfa WordPress 插件,然後一起研究 WordPress 插件的頁面體驗。

DV:它們聽起來像 MIDI 項目。 我對它們非常熟悉,我對 WordPress 不熟悉,我還沒有玩過頁面體驗,我知道你知道 XMPP,我們實際上已經有幾個來自 XMPP 的人在按此。 他們做了一些非常酷的項目。 聽起來你正在研究一些最酷的東西。 這太棒了。 不過,相對於我們的節目主題,今天,WP CLI 來自高層,假設會有一些聽眾不知道 WP CLI 是什麼,我想知道你是否可以把它框起來,這樣他們就可以理解 WP CLI 是什麼是。

AS:是的,當然。 因此,WordPress 有它的管理後端,您可以在其中對站點進行所有維護,您可以在其中對配置選項進行更改。 WP CLI 是用於控制 WordPress 網站的不同界面。 它是您可以從命令行使用的界面。 因此,您以文本形式鍵入命令來控制您的站點。 它允許您執行管理後端所做的一切以及更多操作。 並且通過使用恰好是比管理後端更具表現力的界面的命令行,您可以解決許多非常特定於您的用例的問題,其中管理後台中沒有預先製作的用戶界面元素結尾。 您可以在任何地方混合和匹配 WP CLI 命令來解決這些問題。 然後更進一步,您可以使用 WP CLI 執行任何操作,您也可以將其放入腳本中,最終,您可以自動化所有管理流程,甚至可以遠程執行它們。 因此,轉到基於文本的界面有很多功能,而 WP CLI 允許您使用 WordPress 來做到這一點。

DV:哇,那真的很優雅。 我認為您在營銷方面還有另一個職業。 這是一種非常好的構建 VCI 的方式,儘管它非常好,但記得描述一下。 好的,所以在我看來,我有一個關於 WordPress 歷史上關鍵時刻時間表的小備忘單,當我聽到人們的起源故事時,我會使用它來詢問他們何時進入以及發生了什麼時間。 WP CLI 實際上是我在這裡提到的 WordPress 歷史上的關鍵時刻之一。 早在 2016 年的時間線視圖中,我就維護它,所以我認為它非常重要。 而且我知道你知道有這種推動發布越來越多的特性和功能,但我只是好奇的親戚想說最近一批與特性或重構相關的版本,你在最近的版本中最興奮的是什麼?

AS:所以一個非常令人興奮的功能是添加全局上下文,因為自從 YouTube 建立以來,我們一直在討論該工具應該執行的上下文,如果它應該作為前端進程或管理進程或其他東西執行介於兩者之間。 所有的方法總是伴隨著自己的一系列問題。 所以從來沒有真正乾淨的解決方案。 CLI 默認執行的方式是這種奇怪的混合,既不是管理進程也不是前端進程。 由於歷史原因,但這意味著某些檢查當前請求是否為管理員請求的進程,例如,它們將自動失敗。 當您運行更新時,這種情況在高級插件和主題中最為臭名昭著。 因此,通常,您會看到它們在管理後端工作的那些更新。 但是使用 WP CLI,管理員不是可見的更新,或者它們不能按預期工作。 那是因為為每個插件管理這些更新的自定義邏輯,他們檢查管理進程當然不會減慢前端,並自動執行 WP CLI。 所以現在有了這個新的上下文標誌,我們可以選擇要運行的上下文,這允許您將上下文切換到管理上下文。 例如,當您進行插件更新時,突然間所有高級集成都按預期工作。 這是非常令人興奮的。 抱歉,這不是很令人興奮的新功能。 它是與 cloudways 合作構建的,因為我們目前正在一個默認情況下不啟用的階段進行測試。 所以你需要手動這個自動配置將在下一次迭代中成為默認值。

DV:非常好,非常好。 我明白你為什麼會為此感到興奮。 而且我認為你的想法真的很聰明,好吧,會有前端還是管理員,但實際上,通過給開發人員選擇讓你有能力解決,或者至少是開發人員解決一次用於多個用例。 我明白你為什麼會為此感到興奮。 特別是考慮那個英雄用例並且無法為高級插件呈現更新。 這是一個非常常見的用例。 並想像許多其他人從中級聯。 不過,我確實有一些問題,你知道,有點像闖入路線圖並考慮向後兼容性考慮。 但我們要開始我們的第一次休息。 我們馬上回來。 是時候插播廣告了。 請繼續關注更多緊迫的問題。 歡迎大家回來按我給 Omar 的 WordPress 社區播客,您的主持人 David Vogel。 保羅。 我正在採訪一個關於 WP CLI 和一些向後兼容性連接器的發佈出租人。 就在休息之前,您正在分享您最喜歡的功能,或者最近的 WP CLI,它是一個全局上下文,用於切換標誌,以確定它是前端還是管理進程。 我認為這真的很聰明。 在我進入未來路線圖和向後兼容性之前,您想添加的任何內容。

AS:是的,我想補充一點,我真的很期待,因為這可能是 WP CLI 收到的最常見的支持請求之一。 為什麼更新在 WP CLI 中運行時在管理存儲桶中運行?

DV:是的,那個高級插件 repo 過程的東西抬頭了,我在 WordPress 中找到了很多不同的地方,但是是的,我可以看到這是人們喜歡的核心功能,為什麼它不這樣做? 這對 WordPress 來說太基礎了。 太棒了。 當您考慮 WP CLI 的未來時,我想立即引入向後兼容性考慮,但我們喜歡您對未來感到興奮的前兩三個功能。

AS:所以我已經計劃了很長時間的計劃是徹底檢修 WP CLI 的腳手架。 腳手架命令是一個使用模板讓您生成代碼的命令,例如生成空主題生成空插件。 我想完成超級碗,它不再是一個入門工具,而是更多的持續開發幫助,就像它在 Laravel 空間中使用自閉症命令一樣,其中 WordPress 開發中使用的每個概念都有自己的命令生成它的規範版本。 這不僅會大大加快開發速度,還將成為一個巨大的學習工具,並有助於塑造 WordPress 空間的整體質量。

DV:那個聽起來確實不錯,我也可以開始想像向後兼容性可能會在哪裡產生摩擦,因為還有其他類似的路線圖功能嗎? 那是一個很好的任何其他您要添加嗎?

AS:目前還有一項工作正在重寫 Profile 命令,該命令仍然是第三方命令。 它還沒有捆綁。 但是一旦重寫完成,我還想捆綁該命令,以便每個人都可以輕鬆地進行分析。 網站請求並查看我需要執行哪些操作,查看主要性能瓶頸被卡住的過濾器。

DV:那是另一個很好的。 好的,所以你有兩個多汁的路線圖項目。 我敢肯定,不僅僅是你在考慮未來,而其他貢獻者也在考慮未來。 但顯然,向後兼容性在 WordPress 中是一件大事。 那麼,當您考慮實現該路線圖的能力時,您會考慮哪些因素?

AS:是的,WP CLI 就是它的工作方式,它的內部工作與 WordPress 核心的向後兼容性策略直接相關。 現在 WordPress Core 仍然支持至少 PHP 5.6 WP CLI 也是如此。 WP CLI 有一項政策,即無論 WordPress 的最低要求是多少,只要情況發生變化。 WP CLI 將至少推遲一年的更改,讓每個人都有機會使用 WP CLI 從舊站點遷移。 到新站點。 而且由於 WP CLI 通常是用於從舊站點遷移的工具,因此它仍然需要在導出人員上工作。 所以 WP CLI 永遠無法引領支持較新版本的 PHP 和類似的方法。 因為它將無法實現其主要目的,即訪問舊站點並允許您進行遷移。 所以在這方面,在 WP CLI 中以一種保持代碼新鮮和可維護的方式進行開發真的很難,但仍然堅持使用 WordPress 核心的這個非常低的 PHP 最低要求,這造成了越來越多的麻煩

DV:他們什麼時候會或者你知道core什麼時候會提高5.6的最低版本號。 下一個你有 AB 是因為 5.6 已經過去了很多變化,而且很難保持那麼遠你知道什麼時候更新的版本會是最低限度的嗎?

AS:老實說,我不能說我在 subhappy 項目上投入了很多工作,我有很多機制可以使 WordPress 代碼在技術上可行,以便在這一點上快速轉向更新版本的 PHP,所有技術先決條件都是那裡。 這只是做出決定的問題。 我不能說什麼時候會發生。 因為它已經計劃了很長一段時間,但到目前為止還沒有發生任何事情。

DV:所以從那一刻起,儘管你有一年的時間,WP CLI 可以提高其最低支持的 PHP 版本。 當您考慮交付路線圖的能力時,是否還有軟件堆棧或語言的其他部分或任何其他部分,或者主要是 PHP

AS:是在向後兼容性方面嗎? 主要是php。 WP CLI 是用 PHP 和 gherkin 以及 shell 腳本構建的。 所以 gherkin 是一種測試語言,它並不是一個真正的問題,而且它們的 shell 腳本已經 20 年沒有改變了。 我認為短期內不會有問題。

DV:很明顯,保持軟件與非常舊版本的 PHP 兼容的影響是什麼,但幫助我理解一下,它有什麼挑戰性? 由於堅持支持 5.6,您必須做出哪些權衡取捨

AS:單獨支持五對六並不是什麼大不了的事。 它只是語言的一個版本,而且是一種更醜陋的語言。 那個時候,不過還是很實用的。 問題是您是否還希望能夠在最新版本的 PHP 上運行。 所以你需要覆蓋整個範圍。 只要我們不提高最低版本,我們只是添加越來越多需要支持的 PHP 版本,但現在的節奏是每年都有一個新的主要版本出現,所以他們打電話它是次要版本,但就功能而言,它們是主要版本,最近幾個版本在語言上發生了更大、更徹底的變化。 現在真的很難以一種同時在五個、六個和八個兩個上同時工作的方式構建更底層、更底層的結構,而且隨著時間的推移只會變得更糟。 更重要的是,您需要在 PHP 中工作的工具,您需要運行單元測試,您需要運行功能測試等等。 所有這些工具,它都堅持使用 PHP 單元的 PHP 節奏。 例如,現在很難以這樣一種方式編寫測試,即測試本身可以跨 PHP 單元的所有版本工作。 您需要使用來涵蓋所有這些 PHP 版本。

DV:好的,所以這是所有這些多個群組的重量,如果你願意的話,PHP 類型單元 TA,然後我猜你也可能在為你知道如何將不同版本中的函數用作新函數而苦苦掙扎變得可用並被棄用。 聽起來所有額外工作的集合都是摩擦,會降低你提供新功能的能力,這聽起來公平嗎?

AS:是的,嗯,PHP 也越來越嚴格了。 因此,當您需要映射多個 PHP 版本之前,您可以保持代碼模糊,這樣它就不會遇到一個版本或另一個版本的任何問題。 現在這變得越來越難了,因為惠普經常發出大量的通知、警告和棄用問題。 對於現在最細微的細節,有時這意味著您創建一個需要多次運行 build 的函數,並有一種機制來提取該函數的正確版本,具體取決於您運行的 PHP 版本,哪個一切的維護工作呈指數級增長。

DV:是的,這完全有道理。 好吧,好吧,我想開始探索一下,你知道,你如何打扮它,甚至你對 WordPress 總體上如何做得更好的想法,你知道,打扮向後兼容性,但我們我們要休息一下,我們會馬上回來的。 是時候插播廣告了。 請繼續關注更多緊迫的問題。 歡迎大家回來在 W EMR 上按此 WordPress 社區播客。 我們正在與發射出租人討論 WP CLI 的後向可居住性難題我應該為這個節目選擇一個不那麼繞口令的標題。 但我們在這裡。 很長,是一本好書。 是的,喜歡它,我必須在它結束之前快速說三遍。 但是好的,所以在休息之前,當您開始處理多個版本的 PHP 時,您正在談論這種指數級維護問題,我不知道這是否會讓您感覺更好,但就像 100% 的 WP 引擎一樣客戶在現代版本的 PHP 中進行了修補,我們強制進行了這些更新,但顯然不是每個人都這樣做。 對? 不是每個主機都不是每個託管網站的人都做這些事情,所以這只會產生一些過時的 oshin 預留,軟 PHP 版本甚至 WordPress 肯定是插件。 因此,您知道 WordPress 的這種性質,這種向後兼容的想法是 WordPress 的一部分,如果我自己設置它,它的受歡迎程度確實很重要。 WP CLI 必須滯後,因為它正在為需要升級的人工作。 所以這是一件好事,對吧? 這是這種動態的一個很好的部分。 但我只是想知道您對 WP CLI 或 WordPress 作為一個整體如何改進保留這些好的部分並可能避免更多的壞部分(例如向後兼容性的指數維護要求)有何想法。 你對那份大令狀有什麼看法?

AS:是的,我認為現在我們正處於 WordPress 通過堅持它目前關於 PHP 的非常極端的向後兼容性方法而對其用戶群造成傷害的地步,因為所有跡像似乎都指向這一事實我們將慢慢進入無法讓 WordPress 繼續在最新版本的 PHP 上運行的階段,這是一個真正的問題。 而且我們需要大量時間來處理兼容性問題,因為現在 PHP 發生了更多的變化。 解決這個問題的唯一方法是有一個持續的方法來適應 PHP 週期,它可能會落後於 PHP,但它不可能比 PHP 具有更低的速度,這只會使問題變得越來越糟。 所以它需要與 PHP 的速度相匹配,即使它並沒有落後兩年。 然後我們需要確保我們能夠保持工具、測試、工具等的所有內容都是最新的,以便我們始終能夠支持最新版本的 PHP,因為現在看起來, PHP 9 可能是第一個版本,因為現在看來,如果我們不改變方法,WordPress 將無法適應。 希望,好吧,是的。

DV:我想說的是,你在 WP CLI 上處理的這個指數問題聽起來有點複雜,如果你願意的話,在整個 WordPress 中,如果你願意的話,它有點抬頭,就像你提到的挑戰一樣對於 PHP 九。 因此,就這樣而言,這種推動 WordPress 必須更好地維護的力量與這種速度相匹配,因此它們不會落後於服務太遠,也不會落後於 PHP 版本太遠。 在這裡的最後幾分鐘,我知道向後兼容性存在很多挑戰。 我知道您一直在提供出色的功能,並且您希望提供更多功能。 就像我看到 Gutenberg 的大量貢獻者一樣,我只是覺得我不會做任何服務,除非我們在這個為貢獻者的播客中對 WP CLI 有點愛。 人們如何為 WP CLI 做出貢獻,以幫助保持 WordPress 這個非常重要的部分的活力和驅動力?

AS:首先,我們有主要的 wordpress.org Slack 團隊。 我們有一個 CLI 頻道。 因此,您可以跳上該頻道並打個招呼並提出問題。 如果你想開始,總會有人很樂意幫助你加入 WP CLI 貢獻。 還有網站 make wordpress.org/cli,它是所有文檔的入口點,並鏈接到一個好的第一個問題等等。 然後理想情況下,您將加入現在再次發生的網絡攝像頭貢獻者日之一。 我真的很高興。 因為在這些貢獻者的日子裡,人們實際上可以幫助您設置自己的機器以進行適當的本地開發。 這將阻止這件作品的直播,因為有時入職是人們必須安裝的最困難的障礙。

DV:是的,我可以證明這一點。 一些已經做出貢獻的朋友以及他們克服了什麼。 我知道那裡有很多人幾乎沒有課程和指導,當然讓 WordPress 在文檔方面也有這方面的東西,但這是一個非常好的觀點和貢獻者日在這方面提供幫助。 我也很喜歡你呼喚加入 Slack 頻道的方式。 這讓我想起了 Mike Liddell 如何參與 WordPress 回答我在 Mac Mullenweg 博客文章上的評論,但在社交環境中做出貢獻的想法會帶來更大的成就。 嗯,這太酷了。 感謝您今天加入我們。

AS:謝謝你邀請我。

DV:很高興有你在這裡。 如果您想了解更多關於 Alon 的做法。 請訪問 make wordpress.org 並查找 WP CLI 站點或在 wordpress.org slack 和 WP CLI 頻道中找到他。 感謝大家收聽 WMR 上的 WordPress 社區播客。 同樣,這是您的主持人 David Vogelpohl。 我通過我在 WP Engine 的角色來支持 WordPress 社區。 我喜歡每週在 Press This 上為您帶來最好的社區。