Poise 的公開頁面不傳送前端 JavaScript,也不在文章中使用圖片、SVG、影音、Web Font、iframe 或第三方資源。每個頁面只需要 HTML 與一個本地 CSS;唯一的二進位例外,是瀏覽器頁籤使用的根目錄 favicon。
這組規則首先解決的是可靠性。如果使用者停用 JavaScript、腳本載入失敗,或瀏覽器功能受到限制,文章、導覽、標籤與彙整仍然完整可用。網站不需要等待 hydration,也沒有「內容已下載但畫面尚未啟動」的中間狀態。
互動越少,失敗面越小
一般部落格常見的漢堡選單、明暗切換、站內搜尋和留言系統,往往會逐步帶入更多腳本、資料請求和第三方服務。Poise 不用 JavaScript 重建這些功能,而是重新評估它們是否必要。
導覽使用普通連結,在窄螢幕上自然換行;明暗模式交給 CSS 的系統偏好;文章探索使用標籤、年份彙整、前後篇與 RSS;程式碼以原生的 pre 和 code 呈現。這些功能不需要瀏覽器執行應用程式。
即使 CSS 完全沒有載入,語意化 HTML 仍保留正確閱讀順序。這是漸進增強最簡單的形式:先確保文件本身成立,再用一小層樣式改善閱讀。
CSP 不是唯一防線
網站的 Content Security Policy 禁止腳本、字型、影音、frame、連線與第三方資源。為了讓 favicon 正常顯示,圖片政策只允許同源資源,但這不代表文章可以加入其他圖片。
真正的限制由多層機制共同完成:
- 發布 Skill 不建立圖片或媒體內容。
- 原稿驗證器拒絕 Markdown 圖片、媒體標籤、Mermaid 和危險 URL。
- light-marmite 跳脫原始 HTML。
- 產物稽核只允許根目錄的
favicon.ico,並拒絕 HTML 中的圖片元素。 - CSP 在瀏覽器端再次限制可載入和執行的資源。
這也解決了 favicon 曾被過度嚴格 CSP 阻擋的問題:我們沒有放寬整個網站的媒體政策,而是建立一個可以被 CI 驗證的最小例外。
效能是架構結果
當頁面沒有 JavaScript bundle、圖片、字型和第三方追蹤器,速度不再主要依賴後續最佳化。第一次造訪只下載文章 HTML 與一個約數 KB 的 CSS,後續頁面通常可以重用已快取的樣式。
同時,網站沒有執行時 API、資料庫、Cookie 或 local storage。Cloudflare 收到請求後只需回傳已建置完成的靜態檔案。
這種設計不適合每一種網站,但很適合以閱讀為核心的部落格。Poise 選擇讓文字成為產品本身,而不是先建立一個前端應用,再把文字放進去。