部落格第四版:swup.js 參戰

先看到了這個 Issue,又找到了他的部落格,再找到他的真部落格,哇這真是個和我完全不同世界的人,不過看了一下發現他有用 PJAX,然後就丟給 Claude 源碼問 PJAX 和 swup.js 有啥差,他回我這個:

Claude 回答
Pjax(前段)Swup 4.9.2
切換機制XMLHttpRequest 抓頁面 → 直接替換 DOM (innerHTML/outerHTML)fetch 抓頁面 → 走完整的視覺過場動畫流程再替換
動畫支援無內建動畫概念,純粹「換內容」有完整動畫生命週期:animatePageOutrenderPageanimatePageIn,會等 CSS transition/animation 結束才繼續(awaitAnimations 偵測 transitionend/animationend
View Transition API沒有支援瀏覽器原生 document.startViewTransition()options.native
Hook 系統只有簡單的 pjax:send/pjax:complete 事件完整的 Hooks 類別,有 25+ 種 hook(visit:startanimation:out:startcontent:replace...),支援 before/replace/once/優先權排序
快取內建 Cache class(Map 儲存頁面 HTML,可 set/get/prune
Plugin 系統use()/unuse()/findPlugin(),可擴充
Visit 物件無此抽象每次導航建立 Visit 物件追蹤狀態機(state 1~10:pending→loading→animating→done/aborted)
容器替換方式selectors 對應 head/body 區塊,逐一 switchcontainers(預設 #swup)比對新舊 DOM,replaceWith 整塊替換,並支援 data-swup-persist 跨頁保留元素
History 管理基本 pushState/popState更細緻,含 currentHistoryIndex 判斷前進/後退方向
URL 處理字串處理專屬 class extends URL 封裝

一句話:Pjax 是「輕量換內容」的工具;Swup 是「換頁 + 動畫過場」的完整框架,多了動畫等待機制、hook 生命週期、快取與 plugin 生態,複雜度高一個量級。

其實早就大概知道但是又問了一次,看完之後突然心血來潮想說用 swup 做一個 Hugo 網站看起來會怎樣,就下了這個 prompt:

用swup建立一個有完整換頁效果的部落格。

是以文字內容為主的部落格,內容置中,畫面乾淨清晰,沒有雜物干擾,純粹閱讀體驗。因此換頁效果應該符合此原則。

以hugo完成:你需先用apt安裝hugo,然後hugo new project, hugo new theme完成。

swup如果有不知道使用方式的地方,則git clone閱讀swup文檔。只能讀文檔,不能讀源碼。

等了一陣子結果出來了...AI 好強,而且一看甚至還覺得不錯,外觀美觀大方比現在的好看,行數更少 HTML CSS 都更清晰,瀏覽得益於 swup 加持還更順暢,那好像沒啥理由再留原版...於是第四版就這麼稀里糊塗的誕生了。

大字體,高對比,清晰典雅,AJAX 流暢換頁,代碼行數甚至還更少,這有點東西,到底有多少呢,HTML 從 800 行掉到只有 300 行,這有點太強了吧。

相關文章:部落格三次迭代