Cloudflare 的 Rocket Loader 與你的 React 代碼發生了衝突

你的網頁變白,是因為 Cloudflare 的 Rocket Loader 與你的 React 代碼發生了衝突。Rocket Loader 的原理是延遲所有 JavaScript 的執行,來讓網頁載入看起來變快。

但你的程式碼使用了 @babel/standalone 在瀏覽器現場解析 React。當 Rocket Loader介入時,它會打亂腳本執行的順序。原本應該先由 Babel 解析的代碼,可能因為順序錯亂而沒被處理,導致瀏覽器看不懂 <App /> 這種 JSX 語法,最後就卡死在空白畫面。


解決方法:關閉 Rocket Loader

最直接的解決方式是在 Cloudflare 控制台關閉這個功能。這是一個常見的坑,特別是對於直接在 HTML 寫 React 的專案。

  1. 登入 Cloudflare 後台,選擇你的網域。
  2. 點擊左側選單的 Speed(速度) -> Optimization(最佳化)
  3. 在標籤分頁中找到 Content Optimization
  4. Rocket Loader 選項切換為 Off(關閉)

另一種解法:略過特定腳本

如果你想保留 Rocket Loader 的其他功能,只想讓 React 正常運作,你可以告訴 Cloudflare 不要動你的腳本。

在你 HTML 裡所有的 <script> 標籤中,加入 data-cfasync="false"。例如:

<script data-cfasync="false" src="..."></script>

這樣 Cloudflare 就會跳過這些腳本,按照原本的順序執行,React 就能正常渲染畫面。


對網站速度的直覺影響

關閉 Rocket Loader 後,最明顯的變化是 WordPress 的 JavaScript 檔案會回到「原始載入順序」。如果你的佈景主題或外掛(例如投影片、彈出視窗)使用了大量的腳本,網頁在載入初期可能會感覺稍微慢一點點,因為瀏覽器必須先下載並執行這些 JS 檔案。

不過,這對於 WordPress 來說通常是更安全的做法。Rocket Loader 雖然能提高跑分數據,但它經常會導致某些功能失靈,比如選單點不開、聯絡表單送不出,或是像你剛才遇到的 React 畫面變白。


穩定性會大幅提升

WordPress 是一個由多種外掛組合起來的系統。很多外掛在寫代碼時,會假設某些資源(如 jQuery)是第一個載入的。Rocket Loader 為了求快,會強行改變這個規則。

關閉它之後,你的 WordPress 網站會變得更穩定。你不再需要擔心更新了某個外掛後,網站突然版面亂掉或功能失效。對於企業用的打卡管理系統來說,穩定性絕對比那零點幾秒的跑分差距更重要。


其他補償方案

如果你擔心關閉後速度變慢,WordPress 還有很多更好的優化方式。你可以使用快取外掛(如 WP Rocket 或 W3 Total Cache)來進行檔案壓縮(Minify)和延遲載入。

這些外掛比 Cloudflare 的 Rocket Loader 更了解 WordPress 的結構,處理起來會更細緻。你也可以保留 Cloudflare 的其他功能,例如 CDN 加速和內容快取,這些對速度的幫助依然很大,且不會像 Rocket Loader 那樣容易造成腳本衝突。


建議的操作步驟

既然你目前的打卡系統出現了白畫面,我強烈建議先關掉它。關閉後,請先清除瀏覽器快取再重新開啟網頁。

如果你發現 WordPress 真的慢了很多,我們可以再透過調整 functions.php 或是使用專業的優化外掛來補救。對於開發者來說,能掌握程式碼的執行順序,遠比交給 Cloudflare 自動處理來得安心。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *