优化器

为了使应用程序可恢复,它需要有许多入口点。例如,点击按钮 A 是一个不同的入口点,与点击按钮 B 不同。当我们实现应用程序时,我们通常不会考虑入口点,因此我们通常最终只有一个入口点或 main() 函数。

优化器通过查找以 $ 字符结尾的函数来完成其工作。例如,优化器会将对 component$() 的调用转换为一个入口点。请注意,函数的名称并不重要,重要的是它以 $ 结尾。

每当你看到 $ 时,你应该想到,这里有一个延迟加载边界。这意味着延迟加载的内容可能需要延迟加载,因此无法同步访问。

虽然优化器可以序列化 Qwik 可以序列化的任何数据,但它对闭包有特殊处理。闭包是在其他函数内部创建的函数,它们可能会捕获词法作用域中的变量。序列化闭包的能力是使 Qwik 可恢复的关键属性。如果没有闭包序列化,很难实现可恢复的应用程序。

示例

在这个示例中,请注意我们有两个延迟加载的块,因为我们的代码中有两个 $

打开 Symbols 选项卡,并注意优化器如何将 onClick$ 函数转换为一个入口点。具体来说,请注意 onClick$ 入口点没有导入 @builder.io/qwik 模块。

现在将 onClick$ 回调更改为 store.count++

再次打开 Symbols 选项卡,并注意这次优化器导入了 @builder.io/qwik 并插入了 useLexicalScope() 调用以恢复事件处理程序的捕获状态。恢复函数的捕获状态是使 Qwik 可恢复的原因。

编辑教程