伺服器端與用戶端 PDF 工具:各自如何運作
伺服器端 PDF 工具會把你的檔案上傳到營運者的電腦,在那裡處理,再把結果傳回給你。用戶端工具則是把程式下載到你的瀏覽器,由程式在你自己的裝置上處理檔案。前一種情況,傳出去的是你的文件;後一種情況,傳過來的只有程式碼。
就是這一點差別,決定了誰有可能看到你的檔案。它也說明了為什麼這兩類工具用起來感覺不同、出問題的方式不同、適合的工作也不同。這篇說明會一步一步講清楚兩者實際上發生了什麼。
伺服器端工具裡發生了什麼
- 你選擇一個檔案。頁面透過網際網路把它送到營運者的伺服器,通常是以 HTTPS 上傳。
- 伺服器把它存起來,至少在工作進行期間存在磁碟或記憶體裡,而且常常和其他人的檔案一起排隊。
- 伺服器上的程式,例如 PDF 函式庫、轉檔程式或文字辨識引擎,完成處理。
- 結果也會被存起來,頁面給你一個下載連結。
- 之後,兩個檔案會依照營運者自己的保留規則被刪除。
過去這是唯一實際可行的設計。那時瀏覽器很慢,能讀寫 PDF 的函式庫只能在伺服器上執行。現在的瀏覽器執行複雜的程式碼已經很快,用 JavaScript 寫成的開源 PDF 函式庫可以在一個分頁裡完成大部分日常工作。
HTTPS 保護第 1 步不被竊聽。第 2 到 5 步則取決於營運者:他們的資安措施、員工的存取權限、備份,以及伺服器所在國家的法律義務。大多數營運者都處理得很負責,但你是在信任他們會這麼做。
用戶端工具裡發生了什麼
- 你開啟工具頁面。瀏覽器下載頁面和其中的 JavaScript,和瀏覽任何網站一樣。
- 你選擇一個檔案。瀏覽器的 File API 把它從你的磁碟讀進分頁的記憶體。沒有送出任何東西。
- 在分頁中執行的程式碼完成處理。繁重的部分通常在 Web Worker(一個背景執行緒)中執行,這樣頁面仍能保持順暢。
- 結果在記憶體中產生,透過一個指向你自己瀏覽器記憶體的暫時連結,以下載的形式交給你。
- 關閉分頁時,記憶體就會被釋放。別處沒有任何東西需要刪除,因為什麼都沒有送出去。
Kopitiam 的 PDF 工具就是這樣運作的。它們用 Mozilla 的開源 PDF 引擎 pdf.js 讀取和繪製頁面,解析器在 Web Worker 中執行;再用另一個開源函式庫 pdf-lib 產生新的 PDF。兩者都在你的分頁裡執行。
為什麼用戶端工具可以離線使用
程式一旦到了你的瀏覽器裡,執行時就不再需要網路。這就是離線測試有效的原因:載入工具,關掉 Wi-Fi,工具照樣運作。如果它真的在上傳,馬上就會失敗。
有些細節值得了解。Kopitiam 在工具頁面一開啟時就啟動 PDF 引擎的 worker,而不是等你拖入檔案,所以頁面載入完成後就算網路斷線,工具也能繼續使用。一些比較少用的功能在第一次使用時會載入額外的程式碼,例如用於非拉丁文字的字型引擎。那是程式碼傳到你這裡,而不是你的檔案傳出去。
用戶端處理的真正限制
在你的裝置上處理是有代價的,一個誠實的工具應該告訴你。
- 記憶體。整個檔案都放在分頁的記憶體裡,處理過程中常常不只一份副本。一份 200 MB 的掃描檔可能需要好幾倍的記憶體。瀏覽器會限制每個分頁的記憶體,手機限制得最嚴。
- 速度。做事的是你的筆電或手機,而不是資料中心。把 400 頁轉譯成圖片,或重新壓縮一份長掃描檔裡的每張照片,在舊裝置上明顯會比較慢。
- 電量和發熱。在手機上跑一個很久的工作,會讓處理器全力運轉一段時間。
- 困難的工作。有些工作用伺服器軟體容易得多,例如對大量掃描檔案做文字辨識,或在精確保留版面的前提下轉換複雜的 Office 檔案。很多原本是用戶端的工具,會把這些特定工作交給伺服器處理。
實際上,用戶端工具的大小限制取決於你的裝置,而不是價目表上的某個數字。Kopitiam 的程式碼裡沒有設定檔案大小上限,所以一個非常大的檔案,要不是能處理,就是記憶體不足。先把大檔案分割,或改用桌機瀏覽器而不是手機,通常就能順利完成。
假設你要把一份 40 MB 的掃描檔壓小用 Email 寄出,而手機網路很慢。伺服器端工具必須先把 40 MB 全部上傳才能開始,然後你還要下載結果,所以大部分的等待時間都花在網路上。用戶端工具省掉了這兩次傳輸,但壓縮要由你的手機自己完成,長掃描檔可能要花一些時間。兩者都不是永遠比較快:要看你的網路和裝置。
混合模式,以及需要仔細讀的說法
並不是每個工具都單純屬於其中一種。你會看到幾種模式:
- 大部分在本機,部分在伺服器。簡單的工作在瀏覽器中執行,而轉檔或文字辨識會被上傳。要找針對每個工具的說明,而不是全站統一的說法。
- 加密上傳。檔案會被上傳,但在傳輸和儲存時都有加密。這總比沒有好,但伺服器在處理時仍然要把它解密。
- 本機處理加雲端儲存。處理在本機進行,但結果會存進你的帳號,方便之後開啟。這在設計上就是一份伺服器副本。
- 桌面應用程式。安裝的程式也是用戶端,但它同樣可能把檔案或使用資料傳回去。它的隱私權政策依然重要。
如何檢查你用的是哪一種
開啟瀏覽器的開發人員工具(大多數桌機瀏覽器按 F12),切到「網路」分頁,然後用一個測試檔案跑一遍工具。伺服器端工具在你開始時,會顯示一個和你的檔案大小差不多的請求被送出去。用戶端工具只會顯示一些小請求,例如廣告或分析資料,沒有任何請求會隨你的檔案變大。關掉 Wi-Fi 再做同樣的工作,就是這個測試的快速版。
該選哪一種
對於合約、薪資單、醫療信件和身分證件掃描檔,用戶端是比較好的預設選擇:別處沒有副本可以外洩或被保留。對於公開的宣傳手冊或菜單,用哪一種都可以。當你需要瀏覽器做不好的事,例如對一份 2,000 頁的檔案做文字辨識,選擇一個信譽良好、保留政策清楚的伺服器端工具是合理的,但只針對那個檔案,而不是養成習慣。
常見問題
- 伺服器端和用戶端 PDF 工具有什麼差別?
- 伺服器端工具會上傳你的檔案,在營運者的電腦上處理。用戶端工具把程式送到你的瀏覽器,在你自己的裝置上處理檔案,所以檔案永遠不會被上傳。
- 用戶端處理 PDF 比較有隱私嗎?
- 是的,因為除了你的裝置,任何地方都沒有你檔案的副本。伺服器端工具也可以經營得很好,但只要它還保存著檔案,你就要依賴它的資安措施和保留規則。
- 為什麼用戶端工具處理非常大的 PDF 會很吃力?
- 整個檔案必須放進瀏覽器分頁的記憶體裡,處理過程中常常還不只一份。手機和舊筆電能用的記憶體比較少,所以非常大的掃描檔可能會很慢,甚至失敗。先分割通常會有幫助。
- 如果網站會載入廣告,它還算用戶端嗎?
- 可以算。廣告、字型和分析都是另外的小請求。重點是你檔案的內容有沒有被送出去,這可以在「網路」分頁裡檢查,或用離線測試確認。
- Kopitiam 是伺服器端還是用戶端?
- Kopitiam 的 PDF 工具是用戶端的。它們在你的瀏覽器分頁裡使用 pdf.js 和 pdf-lib,檔案永遠不會被上傳,頁面載入完成後就算網路斷線,工具也能繼續使用。
