先说结论
Service worker 能把页面需要的资源存进设备上的缓存,之后从这份副本响应请求。本站会缓存各工具的页面、脚本和本地引擎。缓存必须先完成,浏览器也可能拒绝或清除缓存,更新可能需要连接。依赖这份副本前,先看工具的离线状态。
缓存就绪后,本地处理操作可以断网完成。这说明该次操作在哪里执行,不保证每项功能或以后会不会发送什么。Service worker 是缓存机制,本身不是隐私边界。
拔了线还活着,说明了什么
上传那一页最硬的一条检查就是拔网线:把工具打开,断网,接着用。这一招为什么灵,值得说透。在服务器上转换你文件的工具,恰恰在干活的那一刻离不开网络。线一断,活就停。断网还照干的工具,不是宣称、而是当场演示了活儿就在你机器上干;而一个够不着网络的页面,代码再想也没法把你的文件送去任何地方。
本地处理工具会显示离线副本是否就绪、是否有连接。用设备上的文件测试具体操作。图片导入、在线汇率、分享和远程摄像头引见都有联网步骤,会在控件旁说明。
副本怎么保持老实
永久保存是礼物还是陷阱,由两个问题决定,这套机件把两个都答了:
- 副本会不会放陈?有连接的时候,worker 会去看有没有新版本,有就整个换掉。版本整个换,是因为副本必须时刻自洽。半旧半新,是唯一一种绝不能端出来的状态。
- 存的到底是什么?页面需要的一切,多一件没有。而且这里每个工具的副本都放在自己的格子里:一个工具的缓存装的就是那个工具,装一个不会悄悄装十个。副本还经得起查看:浏览器的开发者工具能列出缓存里的每个文件,那份清单和页面当初光明正大取来的清单一模一样。
结果就是一个页面,表现得像一个你逛了一趟就装好的应用。而这也是明码标价的服务:浏览器的地址栏能把这里任何一个工具装成应用,用工具自己的图标,一开就直达工具,页面上没有按钮,也没有讨要权限的脚本。同一套机件,穿了件快捷方式的衣服。
离线证明不了什么
这条检查够硬,但不是魔法。它的边界值得说得和它的力气一样清楚:
- 它证明的是断网时的操作。页面可能保存数据以后再发。只关闭标签页不会清除持久的站点存储。若要了解完整路径,应检查源码、存储,以及重新联网后的请求。
- 它适用于具体功能,不是整个站。分享和远程摄像头需要公网引见,本地网络模式仍要这条互联网连接。网址图片和可选的在线汇率也要各自的服务器,本地处理部分则可断网使用。
- 它藏不住你。把页面加载进来这件事本身,就已经把你的地址告诉了网站,和网上每一次加载页面一样。离线管的是你的文件去哪儿,不管匿名。
把离线完成与请求、策略和源码检查一起使用。断网完成说明这次操作当时不需要服务器处理。单凭失败看不出为什么需要连接,两种结果都不能代替核查功能说明的边界。