前端要一口氣匯出一萬頁 PDF:這篇熱文把原理講清楚了,也順便看看守著進度條的你
從開發者分享純前端生成一萬頁 PDF 的 dompdf.js 方案出發,聊聊卡在匯出進度條前的你,在用眼、姿勢與作息上可以怎麼被照顧。
2026 年 10 月 12 日,掘金作者劉財發分享了他開源的 dompdf.js(v2.0 採 Rust + WASM + Worker 架構),示範如何在純前端環境一次生成一萬頁的 PDF。對多數人來說這是工程圈的消息,但如果你是那種會為了「歷史流水檔案一次性匯出」這種需求加班到半夜的前端工程師,這篇文章值得看,而且看的時候,也該順便看看你自己。
這則分享實際說了什麼
先整理可確認的事實脈絡。作者在普通開發機、Chromium 149、純前端環境下測試,A4 規格每個 section 固定 1123px 對應一頁,內容含中文文本與複雜表格。
他先拆解了主流方案的卡點。最受歡迎的 html2canvas + jsPDF 路線,npm 每週下載量超過 80 萬,但因為整篇文件要塞進同一張 Canvas,而 Chromium 的 Canvas 單邊高度上限是 65535px,換算下來 65535 除以 1123,大約 58 頁就到頂。真實專案裡有些三十幾頁就開始靜默失敗,後面的頁面整片空白,而且沒有任何報錯。
jsPDF、PDFKit 這類手寫繪製指令的庫,理論上撐得到一萬頁,但它不認 HTML,複雜表格、CSS 邊框、中文折行都得自己算,等於要在專案裡重寫一套排版器與分頁引擎。
作者的結論是,一萬頁量級有幾個硬條件要同時成立:不能經過 Canvas、不能長時間佔住主線程造成頁面假死、記憶體不能隨頁數線性上漲、產物體積也要控制得住。dompdf.js 便是繞過這些限制的嘗試。
看懂「靜默失敗」,也看懂你自己
這篇技術文裡有個細節,讀起來特別像工程師的日常:失敗不會告訴你,它只是安靜地給你幾頁空白。
這種時候人很容易陷入除錯的隧道狀態。盯著 console、反覆重跑匯出、等那條進度條,一晃兩三個小時過去,肩頸僵了、眼睛乾了、晚餐忘了喫。如果你最近正好卡在類似的需求裡,幾件事可以先放在心上。
用眼的部分,盯著長時間匯出與除錯畫面時,記得用 20-20-20 的節奏:每 20 分鐘看向約 20 英尺(6 公尺)外的東西 20 秒。匯出一萬頁本來就需要時間,這些空檔剛好是站起來動一動的理由,不需要等它跑完才離開座位。
姿勢的部分,長時間等匯出時人常不自覺往前傾、縮著肩。讓螢幕上緣大概與視線齊平,手肘有支撐,比任何昂貴的裝備都有感。
等待時間的心態功課
一萬頁的匯出不是幾秒鐘的事,這種「技術上必須等」的空檔,其實是把工作切出節奏的機會。與其盯著進度條焦慮,不如把等待切成幾段:起來裝杯水、做幾下肩頸繞環、回頭再確認需求文件。這和我們先前聊過的趕論文改圖時的用眼與作息照顧是同一件事:工具再快,等在螢幕前的身體還是你的。
如果你因為這種需求開始連續熬夜,也要留意一些訊號:躺上牀腦子還在跑程式碼、白天靠咖啡撐著、對原本有興趣的東西提不起勁。這些是身體在提醒你,節奏該調了。真的撐不住時,跟團隊把量級與時程攤開來談,往往比自己硬撐更專業。
一個提醒:數字是別人機器上的
作者自己也說明了,測試數據來自同一臺普通開發機,換機器數字會浮動,但量級上的結論不變。這是很好的示範。同理,網路上任何效能數據,包括對你身體的期待,都該保留一點「換臺機器會浮動」的空間。別人的產能曲線不必然是你的,這點在資訊識讀上也是。
工具會一直進步,一萬頁的 PDF 總有一天變成一行指令的事。而在那之前,守在螢幕前的你,眼睛、肩頸和睡眠,值得跟著需求一起被排進時程裡。