昨天先整理好 Rive 檔本身,今天就可以來處理載入時機的問題。
當然在這之前還是要提一下,Rive 通常是有「互動」的「動畫」(不然好像也沒必要用 Rive),所以通常來說,他的載入順序沒必要是最優先的,基於人體先天的限制,載那麼快使用者也沒辦法反應過來。
甚至如果 Rive 不是「首屏」且「第一眼」會看到的部分的話,例如導覽列的按鈕、icon、CTA 按鈕的互動動畫,首屏以外的其他部分等等,那強烈建議把 Rive 檔的載入順序往後拉,且強烈建議針對不同的裝置與網速動態調整載入順序,例如在大螢幕或桌機上,某些 Rive 可以盡快載入,但是在手機上因為是小螢幕,而且手機效能沒有桌機好,那就不一定有必要這樣做。
另外有一些資源,例如音樂音效,因為瀏覽器對於聲音不會自動播放的關係,他的載入時間點又可以再往後拉一點。
講這麼久終於要講到 preload 了,如果不是首屏且第一眼的部分,例如 / 以外的 router,那可以去猜使用者下一步會到哪個部分,提前去載那個部分的 Rive。例如在 /,我猜使用者下一步會到 /products,那就提早去載那裡的 Rive。
至於怎麼猜使用者下一步會到哪邊,有兩個角度,一個是抓使用者的事件,mouseenter, focus 之類的,這應該相對簡單,但是時間不一定夠用。另一個角度是,如果有串 GA 之類的東西的話,應該抓得到路徑探索分析圖之類的東西,可以用這個去猜使用者的下一步,或是簡單一點,把幾個常用的頁面都 preload 起來也可以。
另外有需要的話,可以用 requestIdleCallback 把 preload 的程式碼再包一層,或是乾脆寫一個遞迴沒事就 preload 一下。當然這部分沒規劃好的話,會有流量的問題,要再斟酌一下。
以上都是一些比較理論而且比較 case by case 的東西,而且因為時間與篇幅的關係,我寫的比較模糊一點。總之我目前的產品是一個類似這樣的電商網站,再給我規劃一次的話,我大概會這樣做,給大家參考一下:
當然現在有 AI,直接問你的 Claude 或 Codex(應該沒人在用 Gemini 吧),請他幫你規劃一整套策略會更準,當然要盡量描述你的需求,把這篇文章直接餵給他也可以,如果方便的話,附上路徑探索分析圖會更準。