正确地使用 Web 标准特性

开发者使用新特性的好处,正确的做法是什么?

  • 使用 PWA 系列特性,例如 Service Worker 为用户提供接近原生的体验。

  • 使用 WebRTC 系列特性,实现全功能的在线视频会议。

  • 更旧一些地,使用 Local Storage 而不是 Cookie 来存储状态信息。

残酷的现实,滥用

现状呢?许多开发者并没有将新特性用于造福用户,而是选择滥用,无论是出于服务端的利益还是偷懒。

  • 使用 WASM 在用户的终端上软解 HEVC 视频。

  • 使用 IndexedDB 而不是 CacheStorage 来缓存大量资源。

  • 使用 Service Worker 在页面关闭后保持运行并与服务器通讯,推送广告。

  • 使用 Canvas WebGL 展示繁杂的鼠标特效(轮番显示 12 个 2 字词语)。

  • 使用 WebRTC 在未经用户允许的情况下将用户作为 P2P 节点。

如何反制

作为开发者的我们,以用户的角色使用这些产品时,如何反制这些滥用 Web 标准特性的行为?

  • 默认为所有网页禁用 JavaScript,仅当网页无法使用时启用 JavaScript。

  • chrome://settings/content/all 排序,并删除无用的网站数据。

  • 在 UserJS 中运行 Object.defineProperty(globalThis, "WebAssembly", {}) 阻止网页使用 WebAssembly。使用 // @exclude-match 添加例外规则。

  • 运行 Object.defineProperty(globalThis.navigator, "serviceWorker", {}) 阻止网页注册 Service Worker。在 chrome://serviceworker-internals/ 移除不必要的已经注册的 Service Worker。

  • 运行 Object.defineProperty(globalThis.indexedDB, "open", {}) 阻止 IndexedDB。

除此之外还有很多。

由于我观察到的,滥用特性的网站大多来自中国。因此本文使用中文。顺便给出 一条好玩的东西,请先深呼吸,将他当笑话看。