先說結論
網頁通常和它的連線同生共死,因為每次訪問都要把它重新取一遍。但頁面可以隨身帶一個小程式,叫 service worker。瀏覽器把它安在頁面旁邊,讓它掌管頁面的網路往來。頭一次訪問時,這個 worker 就把組成頁面的一切,標記、樣式、指令碼,完完整整存進你機器上的一份快取。從那以後,請求都由這份副本來答。Wi-Fi 斷了,什麼也不變,反正本來就沒在取什麼。
這裡沒有魔法,也不需要什麼特殊許可:這是瀏覽器的標準機件,裝進各大瀏覽器差不多十年了。少見的是像這個站這樣把全身重量都壓上去的站。對一個全部承諾就是「你的檔案永不出門」的站來說,離線不是舒適性配置。它就是證明。
拔了線還活著,說明了什麼
上傳那一頁最硬的一條檢查就是拔網線:把工具開啟,斷網,接著用。這一招為什麼靈,值得說透。在伺服器上轉換你檔案的工具,恰恰在運作的那一刻離不開網路。線一斷,活就停。斷網還照乾的工具,不是宣稱、而是當場演示了工作就在你機器上做;而一個夠不著網路的頁面,程式碼再想也沒法把你的檔案送去任何地方。
這是任何隱私政策都給不出的東西。政策寫的是打算,打算會改;飛航模式裡照常運作的頁面,是物理。所以這個站的每個工具都能離線用,頁面上還帶一個即時指示,告訴你此刻在不線上。你可以一邊開關網路一邊看它翻面,用十來秒鐘跑完世上最硬的那條檢查。
副本怎麼保持老實
永久儲存是禮物還是陷阱,由兩個問題決定,這套機件把兩個都答了:
- 副本會不會放陳?有連線的時候,worker 會去看有沒有新版本,有就整個換掉。版本整個換,是因為副本必須時刻自洽。半舊半新,是唯一一種絕不能端出來的狀態。
- 存的到底是什麼?頁面需要的一切,多一件沒有。而且這裡每個工具的副本都放在自己的格子裡:一個工具的快取裝的就是那個工具,裝一個不會悄悄裝十個。副本還經得起檢視:瀏覽器的開發者工具能列出快取裡的每個檔案,那份清單和頁面當初光明正大取來的清單一模一樣。
結果就是一個頁面,表現得像一個你逛了一趟就裝好的應用。而這也是明碼標價的服務:瀏覽器的位址列能把這裡任何一個工具裝成應用,用工具自己的圖示,一開就直達工具,頁面上沒有按鈕,也沒有討要許可權的指令碼。同一套機件,穿了件快捷方式的衣服。
離線證明不了什麼
這條檢查夠硬,但不是魔法。它的邊界值得說得和它的力氣一樣清楚:
- 它證明的是那一刻,不是以後。離線做的事留在了你機器上,就這些。頁面原則上可以把資料攥著,等連線回來再發。所以最要緊的檔案,重新聯網之前先把分頁關掉;或者把另一頭也查了:連線恢復的那一刻,盯住網路面板。
- 它證明的是這一頁,不是整個站。每一頁各自為自己作答。這裡唯一用網路的那一頁,把這件事寫在了自己頁面上:文字分享工具,它的全部工作就是在兩臺裝置之間遞東西,它唯一的一條連線運的是什麼,頁面上講得明明白白。
- 它藏不住你。把頁面載入進來這件事本身,就已經把你的地址告訴了網站,和網上每一次載入頁面一樣。離線管的是你的檔案去哪裡,不管匿名。
正是這些邊界,讓上傳那一頁教的是四條檢查而不是一條:網路面板、頁面原始碼裡的安全策略、讀得了的程式碼,補上了拔線補不上的那部分。但論第一道篩子,沒有比它更快的:一個工具斷了網做不到活,你就已經知道工作在哪裡做了,後面的都不用再讀。