對於 PHP 框架,我們真的需要使用 LTS 版本嗎?

唯一丶發表於2022-03-06
封面圖片源自:pexels.com

前言

最近隨著 Laravel 9 的釋出,有人發現了一個有趣的事情,那就是 Laravel 9 最初開發時是作為 LTS 版本釋出的,來接替 Laravel 6,在正式釋出時也是以 LTS 版本釋出,而在正式釋出後不久,Laravel 的官方文件中卻將 Laravel 9 的 LTS 字樣進行了移除,使得 Laravel 9 變成了一個「普通版本」。

對於普通版本,Laravel 提供了 18 個月的錯誤修正與 2 年的安全性更新。而對於長期支援版本,則提供了 2 年的錯誤修正,與 3 年的安全性更新。

在做事情的過程中,我們總怕出現問題,在做完一件事情之後,我們也常說「如果它能用,就不要去輕易的改動它」,這句話在過去適用,在未來一樣也適用,這是前輩人總結換來的經驗。只要不做事,就不會出錯

而隨著時代的演變,軟體的迭代速度之快,有些軟體兩年一個大版本,有的甚至一年一個大版本,而其的支援週期一般也就兩三年,如果你的業務能夠在生存下去,可能過了兩三年,你所使用的版本就與最新的差了好幾個大版本了,而且可能你使用的版本已經被官方停止了支援,這時候如果你不升級你所使用的版本,就有可能讓你的業務暴露在危險中。

什麼是 LTS ,它有什麼優勢?

長期支援 (英語:Long-term support,縮寫:LTS)是一種軟體的產品生命週期政策,特別是開源軟體,它增加了軟體開發過程及軟體版本週期的可靠度。長期支援延長了軟體維護的週期;它也改變了軟體更新(補丁)的型別及頻率以降低風險、費用及軟體部署的中斷時間,同時提升了軟體的可靠性。

以上是摘自 Wikipedia 關於 LTS 的描述,可以看出來, LTS 相較於前面我們討論到的問題似乎有了一個有效的解決方案,那就是我們當初在立項的時候,就直接選擇 LTS 版本。LTS 相較於普通版本,降低了更新頻率,也延長了支援時間。這樣,我們就可以保證我們的專案使用的框架或者庫有足夠長的支援(功能、安全)時間,從而降低安全風險,以及維護成本。

LTS 的劣勢

LTS 的支援,都是取決於軟體廠商的支援力度,有的可能支援 2 年,有的可能 3 年,有的可能 5 年。

另外這段漫長的支援時間裡面,軟體的普通版本可能已經增加了好幾個版本,引入了很多新特性,而你,可能都會與這些新特性無緣。

這還算不上最麻煩,麻煩的事情還在後面。

如果放在以前,你問我「在新開專案的時候,你會選擇 LTS 版本,還是最新版本?」我一定會毫不猶豫的「選擇 LTS 版本」,因為沒有公司能夠拒絕「穩定」這一利好因素,畢竟公司大多數時候都會準求穩定為主。

但是如果放到現在,我會告訴你「我會選擇當前較新的穩定版本」,當你的業務可以一直被支援下去的時候,兩年,三年,五年,甚至更長,這種與主版本脫節的落差就會越來越大,一次性升級的風險也就越來越大,你也就愈加不敢輕易升級,可能會從而導致你所使用版本永遠定格在了那裡。

以 Laravel 為例,一旦你有了首選 LTS 的想法,如果你在 2015 年建立專案的時候選擇了 Laravel 5.1 LTS,那麼在兩年後的 2017 年, Laravel LTS 版本迎來了 5.5 版本的更新。這時候,你中間就差了 5.2、5.3、5.4 三個版本的跨度,雖然這三個版本的升級指南中的內容中都並不算多,除了框架本身,你還要兼顧框架依賴部分庫,甚至你可能還要照顧你的 PHP 版本等等。

另外,值得注意的是 PHP 的每個版本積極支援時間也只有 2 年,外加 1 年的安全更新。

同時,因為如此大的跨度的可能帶來的風險,你的 Leader 或許並不能同意你的升級,後面或許會更加的麻煩。

這其中有一點就不得不提的是,雖然 Laravel 提供了 LTS 版本,但是 Laravel 所使用到的依賴,這些大部分並沒有提供 LTS 的選項,這也讓其的 LTS 版本失去了一定意義。

說回 Laravel 9

Laravel 9 的目標 PHP 版本是 >=8.0.2,即也包含了 8.1,比如 Eloquent 的列舉轉換

列舉 是 PHP 8.1 中引入的一個新語法特性,可以檢視 PHP 手冊中關於 列舉的介紹

在 Laravel 9 釋出之後的次日,Laravel 依賴的 Symfony ,提出了一個有關 PHP 8.0 的類預載入的 問題的討論

討論中提議,在 Symfony 下一個版本,也就是 6.1 中,將 Symfony 的 PHP 最低版本要求提高到 8.1,在此之前 Symfony 的次要版本更新都是不會提高 PHP 最低版本的要求的。

目前根據 Laravel 開發者 Taylor Otwell 的訊息,最壞的情況下 Laravel 9 也將提供至少 2 年的安全性更新(即普通版本的支援)。

依據 laravel/framework 的 composer.json 宣告來看,在 Laravel 的下一個大版本中,Laravel 10 將依賴於 Symfony 6.1 部分元件,同時也意味著,Laravel 10 的 PHP 最低版本要求將被提高到 8.1。

結語

同時,Taylor Otwell 也在 Twitter 上表示:「鼓勵每個人始終嘗試使用最新的 Laravel

image-20220306132441238.png

目前 Symfony 關於那個問題的討論現已關閉,且已確認 Symfony 6.1 將會將最低 PHP 版本限制提高到 8.1

對此,在 PHP 框架及 PHP 版本的選擇方面,我個人仍然認為:為了避免在後期因為較大版本的跨度帶來的問題,我們應該及時使用和更新到較新的版本,而非逃避式的去使用 LTS 版本,從而在以後造成一些 “歷史遺留問題”

  • 文章僅為個人關掉表述。
  • 如果你有好的建議與意見,不妨互相探討
  • 如果文中的內容侵犯到了你得權益,請與我聯絡處理。
  • 你還可以點選文章中的來源連結和文章底部的參考連結,瞭解更詳細的內容。

參考

相關文章