优化器
为了使应用程序可恢复,它需要有许多入口点。例如,点击按钮 A
是一个不同的入口点,与点击按钮 B
不同。当我们实现应用程序时,我们通常不会考虑入口点,因此我们通常最终只有一个入口点或 main()
函数。
优化器通过查找以 $
字符结尾的函数来完成其工作。例如,优化器会将对 component$()
的调用转换为一个入口点。请注意,函数的名称并不重要,重要的是它以 $
结尾。
每当你看到 $
时,你应该想到,这里有一个延迟加载边界。这意味着延迟加载的内容可能需要延迟加载,因此无法同步访问。
虽然优化器可以序列化 Qwik 可以序列化的任何数据,但它对闭包有特殊处理。闭包是在其他函数内部创建的函数,它们可能会捕获词法作用域中的变量。序列化闭包的能力是使 Qwik 可恢复的关键属性。如果没有闭包序列化,很难实现可恢复的应用程序。
示例
在这个示例中,请注意我们有两个延迟加载的块,因为我们的代码中有两个 $
。
打开 Symbols
选项卡,并注意优化器如何将 onClick$
函数转换为一个入口点。具体来说,请注意 onClick$
入口点没有导入 @builder.io/qwik
模块。
现在将 onClick$
回调更改为 store.count++
。
再次打开 Symbols
选项卡,并注意这次优化器导入了 @builder.io/qwik
并插入了 useLexicalScope()
调用以恢复事件处理程序的捕获状态。恢复函数的捕获状态是使 Qwik 可恢复的原因。