树摇静态组件

Qwik 的一个关键概念是,Qwik 只加载客户端中需要重新渲染的组件的代码。如果组件是静态的(不需要重新渲染),Qwik 不会加载该组件。这是一种动态树摇。这里使用“动态”一词来区分它与经典的静态树摇。

静态与动态树摇

静态树摇是捆绑器如何移除不可达代码。在应用程序的情况下,所有组件都是可达的。这是因为组件在 SSR 中的初始渲染时是可达的。否则,该组件将不会对客户端可见。因此,静态树摇器无法从我们应用程序的初始渲染树中移除任何组件。

动态树摇指的是,在初始渲染之后,组件不再可以通过用户可以执行的操作来访问。该组件仅在初始 SSR 渲染时可达,但不能通过后续的用户交互访问。这就是我们使用“动态树摇”一词来区分它与捆绑器将执行的静态树摇的原因。

静态树摇的缺点是,它在决定特定组件是否可达时不考虑运行时上下文。它必须假设最坏的情况,因此必须保留该组件,因为它在 SSR 期间在服务器上是可达的。

示例

通过点击 +1 按钮与示例进行交互。需要注意一些事项

  • 服务器必须执行所有组件。因此,从服务器的角度来看,所有组件都是必需的。
  • 客户端点击 +1 不需要加载 <App>,因为它不需要重新渲染。因此,<App> 永远不会在客户端加载。

现在编辑 Child 并删除对 {props.store.count} 的绑定。注意,现在子组件不再在客户端渲染,并且与它相关的渲染代码也永远不会加载。

Qwik 根据应用程序的运行时上下文来确定哪些组件是必需的。数据绑定决定组件是静态的还是动态的,因此决定组件是否会被树摇。

在实践中,应用程序中的许多组件都是静态的,并且它们永远不需要从客户端加载。

编辑教程