優化器
為了讓應用程式可以恢復,它需要有很多進入點。例如,點擊按鈕 A
與點擊按鈕 B
是不同的進入點。當我們實作應用程式時,我們通常不會考慮進入點,因此我們通常只有一個進入點或 main()
函式。
優化器的工作原理是尋找以 $
字元結尾的函式。例如,優化器會將對 component$()
的呼叫轉換為進入點。請注意,函式的名稱並不重要,重要的是它以 $
結尾。
每次看到 $
時,您都應該想到這裡有一個延遲載入邊界。這意味著延遲載入的內容可能需要延遲載入,因此無法同步存取。
雖然優化器可以序列化 Qwik 可以序列化的任何資料,但它對閉包有特殊的處理方式。閉包是在其他函式內建立的函式,並且可以擷取詞彙範圍中的變數。序列化閉包的能力是使 Qwik 可恢復的關鍵屬性。如果沒有閉包序列化,就很難擁有可恢復的應用程式。
範例
在此範例中,請注意我們有兩個延遲載入區塊,因為我們的程式碼中有兩個 $
。
開啟「符號」標籤,並注意優化器如何將 onClick$
函式轉換為進入點。具體來說,請注意 onClick$
進入點不會匯入 @builder.io/qwik
模組。
現在將 onClick$
回呼更改為 store.count++
。
再次打開「Symbols」標籤,這次您可以注意到 Optimizer 已經導入了 @builder.io/qwik
,並插入了 useLexicalScope()
呼叫,以恢復事件處理常式的捕獲狀態。恢復函式的捕獲狀態正是 Qwik 可恢復性的關鍵。