2023 年 6 月 22 日,星期四
Next.js App Router 更新
作者:App Router 代表了 Next.js 未來的全新基礎,但我們也意識到,仍有機會使其體驗更佳。我們想提供關於我們目前優先事項的最新消息。
對於即將發布的 Next.js 版本,我們將重點放在以下幾個方面:
- 提升效能
- 提升穩定性
- 加強開發者教學
應用程式路由器
首先,說明應用程式路由器的設計理念會有所幫助。
透過與 React 對齊,超越頁面路由器的限制
隨著 Next.js 的採用率提高,以及越來越多大型應用程式的建構,我們收到了來自社群的回饋,並發現了一些我們開始達到頁面路由器限制的領域。
最值得注意的是,Next.js 頁面路由器並非為串流設計,而串流是現代 React 中的基石,它有助於我們解決面臨的限制,並實現我們對 Next.js 的長期願景。
為了製作串流友好的框架 API,以進行資料提取、資源載入和頁面詮釋資料,以及利用 React 更新的基元,需要對 Next.js 的核心架構進行大幅度的更改。
我們藉此機會以最新的 React 並行功能(例如伺服器元件、Suspense 等等)為基礎進行建構,這些功能已針對串流架構進行設計。
漸進式採用是不可妥協的
我們不希望社群為了更新到最新版本的 Next.js 而必須從頭重建整個應用程式。我們相信漸進式採用是隨著時間推移發展應用程式的最佳策略。
- 逐步遷移路由:您無需大幅改寫應用程式,即可將單一路由遷移至 App Router,並按照自己的步調開始利用新功能。請參閱我們的逐步採用指南或觀看教學影片。
- 輕鬆回退:如果您對 App Router 的效能或開發體驗不滿意,可以輕鬆地將特定路由回退至 Pages Router。
我們正在探索更多機會,讓逐步採用更加輕鬆。
邁向穩定
我們在一年多前開始建構 Next.js App Router,並從那時起持續發布新功能和改進。
- 初步公告:同年五月,我們發布了一份 RFC,概述我們讓路由和佈局更具彈性的計畫。
- 早期 Beta 版:在 Next.js 13 中,我們發布了 App Router 的第一個版本,讓社群可以試用並提供早期回饋。
- 穩定 API:為了回應回饋,我們將工作重點放在最終確定核心 API 上。在 13.4 版中,我們將 App Router 的核心 API 標記為穩定版,可供更廣泛地採用。
我們目前的重點
將其標記為穩定版,向社群發出訊號,表示核心 API 已確定,不會再進行需要重寫的主要重大變更。
從那時起,我們收到了許多寶貴的回饋,而使用率的提高也無可避免地暴露出一些錯誤和進一步改進的機會。
我們想讓您知道,我們尚未滿意 App Router 的使用體驗,而這是我們今後的首要任務。因此,讓我們來談談我們正在做的工作,以改善這種體驗。
提升效能
未來幾個月,我們將著重於效能的三個方面:本地迭代速度、生產構建時間和無伺服器效能。
本地開發效能
隨著 Next.js 的成熟以及使用它構建的應用程式規模的增長,我們一直在緩慢且逐步地將其底層架構的組件替換為更快、更具擴展性的工具。
-
遷移進度:我們首先將 Babel (編譯) 和 Terser (壓縮) 替換為 SWC。這有助於提高本地迭代速度和生產構建時間。
-
長期投資:無論應用程式規模大小,保持出色的快速重新整理效能意味著讓 Next.js 在本地開發過程中盡可能以增量方式運作,僅在需要時才打包和編譯程式碼。
這就是我們目前正在努力將 webpack (打包) 替換為 Turbopack 的原因,它建立在一個低階增量計算引擎之上,可以將快取精細到個別函式的級別。
遷移到 Turbopack 的 Next.js 應用程式即使規模增長,快速重新整理速度也會持續提升。
在過去幾個月中,Turbo 團隊一直專注於提升 Turbopack 的效能,並支援所有 Next.js 功能和應用程式路由器 API。
Turbopack 目前 處於測試階段 (
next dev --turbo
)。 -
改進現有架構:除了投資未來之外,我們也在持續改進現有 webpack 架構的效能。
對於某些 Next.js 應用程式,尤其是那些重新整理數千個模組的應用程式,我們已經看到一些關於本地開發和快速重新整理不穩定的報告。我們正在努力提升這方面的效能和可靠性。例如,我們最近新增了預先配置的設定 (
modularizeImports
) 來處理 大型圖示庫,這些圖示庫可能會意外地強制數千個模組在每次請求時重新載入。
建置時間效能
我們也正在使用 Turbopack (next build --turbo
) 進行生產構建,並且已經 開始實作 這項工作的首批內容。預計在未來的版本中會有更多相關更新。
生產效能
最後,在 Vercel 上,我們正努力最佳化 Vercel 函式的效能和記憶體使用量,這些函式透過 Next.js 應用程式碼定義,確保在維持可擴展無伺服器架構優勢的同時,盡可能減少冷啟動。這項工作促成了 Next.js 中新的追蹤功能(實驗性),並開始探索伺服器端開發工具。
提升穩定性
頁面路由器已經存在六年了。應用程式路由器的發佈意味著引入了新的 API,這些 API 仍然很新,只有六個月的使用時間。我們在短時間內取得了很大的進展,但隨著我們從社群以及他們如何使用它中學到更多,仍然有改進的機會。
我們感謝社群積極採用應用程式路由器並提供回饋。我們正在調查許多錯誤報告,感謝您建立的最小重現範例,以幫助隔離問題並驗證修復。
自 13.4 以來,我們已經修補了許多關於穩定性的高影響錯誤,這些錯誤在最新的修補程式版本 (13.4.7
) 中可用。我們將繼續高度重視效能和穩定性。