2023前端技術盤點與2024技術展望
使用 using 后:離開作用域后會自動釋放文件句柄
3)反對 TypeScript 的聲音
盡管目前 TypeScript 如日中天,取得了前所未有的成功。然而,在今年 8 月份,Ruby on Rails 的創建者 David Heinemeier Hansson(DHH) 從即將發布的 Turbo 框架第 8 版中刪除了 TypeScript,并發文稱 “通過添加微不足道的類型技巧,讓我的開發體驗變得更加糟糕,而且頻繁引發很多困擾。本應簡單的事情反而變得很困難。”
其實,Turbo 并不是第一個放棄 TypeScript 的前端框架,今年 3 月,Svelte 團隊計劃將會從目前使用的 TypeScript 遷移到 JSDoc。Svelte 創始人 Rich Harris 曾在推特上說道:Svelte 并沒有放棄類型安全,而是改用 JSDoc,以減少包體和代碼編譯時間,依舊支持使用 tsc 編譯器檢查類型。
早在 2020 年,Deno 團隊已經開始在 Deno 內部代碼拋棄 TypeScript,當時 Deno 團隊給出的理由如下:
● 在變更文件時, TypeScript 導致連續編譯過程變得非常緩慢。
● 在創建 Deno 可執行文件以及面向用戶的 API 源文件時,TypeScript 結構會引發一系列運行時性能問題。
● TypeScript 本身對于 Deno 代碼的組織工作毫無幫助,反而增強了代碼組織負擔,具體詳見以下的 issue:https://github.com/denoland/deno/issues/4748。
總結而言,他們拋棄 TypeScript 重回 JavaScript 的主要原因如下:
1. 減少代碼編譯構建時間和代碼體積。
2. 減少 TypeScript 元編程所帶來的代碼組織的負擔和所需要編寫的代碼量。
4)TypeScript 轉向 JavaScript 真的是一個好選擇嗎?
在日常業務開發中,我們通常只會使用類型定義、泛型以及簡單的類型推導,并不會使用到所謂的“TypeScript 類型體操“,但是 TypeScript 強類型所帶來的類型安全能夠大幅度提高項目的代碼質量和可維護性。而在類庫和框架的開發中,拋棄 TypeScript 轉向 JavaScript 的只是少數開發者,目前絕大部分的主流前端開源項目都是在擁抱 TypeScript,這也足以證明社區肯定 TypeScript 所帶來的價值。
此外,雖然 TypeScript 原生編譯器速度較慢,但是筆者認為這個是可以通過更換 esbuild 或則 swc 等性能更加優異的編譯器來解決的。
沒有任何一門語言是十全十美的,TypeScript 也毫不例外。筆者認為 TypeScript 的確會引入了一定的復雜度,但是其所提供的類型系統能夠大幅度提高項目的健壯性和可維護性,在絕大部分前端開發場景下,都是利大于弊的,能夠很好地規避 JavaScript 弱類型帶來的大部分陷阱。ECMAScript 2023:持續完善并拓展 JavaScript 語法
回顧完前端語言明日之星 TypeScript,讓我們將目光轉到 JavaScript 上。今年 6 月 27 日,第 125 屆 ECMA 大會正式批準了 ECMAScript 2023 語言規范。總而言之,本次 ECMAScript 2023 并沒有新增大的改動點,更多是對 JavaScript 原來語法的完善與增補。而筆者認為其中比較有意義的更新主要有以下兩個:
1) WeakMap 支持 Symbol 作為 Key。
總所周知, WeakMap 的 Key 是弱引用,且要求是唯一的值。由 Symbol 具有唯一性,保證不可重建,因此在今年的 ECMAScript 2023 新特性中擴展了 WeakMap API,WeakMaps 允許使用唯一的 Symbol 作為鍵。不過值得注意的是,通過 Symbol.for 創建的 Symbol 是不可以作為弱引用的,因為 Symbol.for 會在全局注冊 Symbol,并支持在任何地方通過 Symbol.for 再次引用。
2) 新增四個通過副本修改數組的方法:toReversed()、toSorted()、toSpliced()、with(),
目前大多數的數組方法都是非破壞性的,當然也存在一些對原數組具有破壞性的方法,例如 reverse()、sort() 以及 splice() 。當我們想要使用這些方法又不想對原數組造成影響的話,通常需要先拷貝一份數組再調用相應的方法,由此可見,這種開發體驗不友好的。因此在今年的 ECMAScript 2023 優化了開發體驗,新增了相應的非破壞性方法。眾望所歸的 CSS 嵌套和 CSS 父選擇器正式落地
1) 原生 CSS 支持嵌套
CSS 支持嵌套一直是 Sass 中最受開發者喜愛的功能點之一,它允許讓開發者在編寫樣式的時候更加整潔、內聚。據上一年 State of CSS 統計,CSS 嵌套是受訪者認為 CSS 最需要補充的功能之一。
(圖選自 https://2023.stateofcss.com/zh-Hans/usage/#what_do_you_use_css_for)
而在今年 CSS 2023 新特性中,原生 CSS 正式支持嵌套寫法,在高版本瀏覽器中,無需依賴額外的編譯器即可享受 Sass 嵌套語法,很大程度上優化了開發者體驗,提高了CSS 的可讀性和可維護性。