树摇静态组件
Qwik 的一个关键概念是,Qwik 只加载客户端中需要重新渲染的组件的代码。如果组件是静态的(不需要重新渲染),Qwik 不会加载该组件。这是一种动态树摇。这里使用“动态”一词来区分它与经典的静态树摇。
静态与动态树摇
静态树摇是捆绑器如何移除不可达代码。在应用程序的情况下,所有组件都是可达的。这是因为组件在 SSR 中的初始渲染时是可达的。否则,该组件将不会对客户端可见。因此,静态树摇器无法从我们应用程序的初始渲染树中移除任何组件。
动态树摇指的是,在初始渲染之后,组件不再可以通过用户可以执行的操作来访问。该组件仅在初始 SSR 渲染时可达,但不能通过后续的用户交互访问。这就是我们使用“动态树摇”一词来区分它与捆绑器将执行的静态树摇的原因。
静态树摇的缺点是,它在决定特定组件是否可达时不考虑运行时上下文。它必须假设最坏的情况,因此必须保留该组件,因为它在 SSR 期间在服务器上是可达的。
示例
通过点击 +1
按钮与示例进行交互。需要注意一些事项
- 服务器必须执行所有组件。因此,从服务器的角度来看,所有组件都是必需的。
- 客户端点击
+1
不需要加载<App>
,因为它不需要重新渲染。因此,<App>
永远不会在客户端加载。
现在编辑 Child
并删除对 {props.store.count}
的绑定。注意,现在子组件不再在客户端渲染,并且与它相关的渲染代码也永远不会加载。
Qwik 根据应用程序的运行时上下文来确定哪些组件是必需的。数据绑定决定组件是静态的还是动态的,因此决定组件是否会被树摇。
在实践中,应用程序中的许多组件都是静态的,并且它们永远不需要从客户端加载。
编辑教程