靜態元件的樹搖
Qwik 的一個關鍵概念是,Qwik 只會在客戶端載入需要重新渲染的元件程式碼。如果元件是靜態的(不需要重新渲染),Qwik 將不會載入該元件。這是一種動態樹搖的形式。這裡使用「動態」一詞來區別於傳統的靜態樹搖。
靜態與動態樹搖
靜態樹搖是打包器移除無法到達程式碼的方式。在應用程式的例子中,所有元件都是可到達的。這是因為元件在 SSR 的初始渲染時是可到達的。否則,客戶端將看不到該元件。因此,靜態樹搖無法從我們初始的應用程式渲染樹中移除任何元件。
動態樹搖指的是初始渲染後,元件不再可透過使用者可以執行的操作到達。該元件僅在初始 SSR 渲染時可到達,但在後續的使用者互動中則無法到達。這就是為什麼我們使用「動態樹搖」一詞來區別於打包器會執行的靜態樹搖。
靜態樹搖的缺點是,它在決定特定元件是否可到達時,不會考慮執行時上下文。它必須假設最壞的情況,因此會保留該元件,因為它在 SSR 期間在伺服器上是可到達的。
範例
透過點擊 +1
按鈕與範例互動。需要注意幾點
- 伺服器必須執行所有組件。因此,從伺服器的角度來看,所有組件都是必需的。
- 在客戶端點擊
+1
並不需要載入<App>
,因為它不需要重新渲染。因此,<App>
永遠不會在客戶端載入。
現在編輯 Child
並刪除與 {props.store.count}
的綁定。請注意,現在子組件不再在客戶端渲染,並且其相關的渲染程式碼永遠不會被載入。
Qwik 根據應用程式的運行時上下文來決定需要哪些組件。資料綁定決定了組件是被視為靜態還是動態,因此也決定了組件是否會被搖樹優化。
在實務中,應用程式中的許多組件都是靜態的,它們永遠不需要從客戶端載入。
編輯教學