PWA 和桌面应用有什么区别,天天用的网站该选哪个
PWA 是网站自己提供的可安装版本,Pake 这类套壳应用则把任意网址放进用系统网页视图渲染的原生窗口。站点已经有 PWA,又想要它的离线和推送,就装 PWA,站点没有 PWA,或者想控制窗口和外壳,就用套壳应用,两者都不是 Swift 或 C++ 意义上的原生应用。
PWA 是什么
MDN 把渐进式网页应用定义为用网页技术构建、体验接近平台原生应用的应用,活儿由站点方来做。PWA 必须有一个 web app manifest,也就是一份写着名称、图标和起始地址、告诉浏览器怎么安装的 JSON,通常还会带一个 service worker,它是夹在页面和网络之间的脚本,可以缓存文件,让一部分功能离线可用,MDN 明确说安装本身并不要求有 service worker。
装好以后,MDN 说 PWA 会在其他应用旁边有自己的图标,可以作为独立应用而不是标签页启动,占满整个屏幕,没有网络也能工作,接收推送并通过系统通知显示提醒,这些都取决于站点怎么写。没有 manifest 的站点就没有 PWA,manifest 写得很薄的站点,装出来也只是一个窗口。
Chromium 系浏览器的门槛写在 MDN 的可安装性说明里,manifest 要有 name 或 short_name、包含 192 px 和 512 px 的 icons、start_url 和 display,并且通过 HTTPS 提供,以上页面核对于 2026 年 10 月 19 日。
浏览器怎么安装
- Chrome:打开网站,依次选更多、投放、保存和分享、将网页安装为应用…,站点支持时也可以点地址栏右侧的安装图标。Google 的帮助页写了 Windows、Mac 和 Linux 上的卸载方式,并说已安装的应用可以在
chrome://apps管理。 - Edge:Edge 判断站点可安装时,地址栏会出现 App available 图标,点 Install 完成。微软的说明提到,装好的 PWA 会出现在任务栏、开始菜单和 Alt+Tab 里,可以在
edge://apps打开 Auto-start on device login,还能把常用任务放进右键菜单。 - Safari 17 及以后:在 macOS Sonoma 上选文件 > 添加到程序坞,起个名字再点添加。Apple 的支持页面说这个网页应用不与 Safari 共享历史记录、Cookie、网站数据和设置,工具栏有后退、前进和分享按钮,以及在 Safari 浏览器中打开。MDN 补充说有没有 manifest 都可以添加,WebKit 的发布说明则说 Mac 上的网页应用支持 web push、角标、service worker 和 manifest。添加的那一刻 Safari 会把站点的 Cookie 复制过去,所以登录状态通常能带过来。
- 桌面版 Firefox:MDN 说它不支持用 manifest 安装 PWA。
套壳应用怎么做出来
套壳应用从网址出发,不依赖站点发布任何东西。Pake 复制一份 Tauri 模板,把你的选项写进配置,用 Rust 编译,再打成安装包。运行时它就是一个原生窗口,套着所在平台的网页视图,也就是 macOS 上的 WKWebView、Windows 上的 WebView2 和 Linux 上的 WebKitGTK,这是 Tauri 网页视图说明里列的。站点每次启动都从网络加载,默认打开上次停留的页面,Pake 再在上面叠加自己的脚本,构建过程可以看Pake 是怎么工作的。

PWA 从站点发布的文件出发,由浏览器安装,套壳应用从一个网址出发,用原生外壳包住系统自带的 Web 视图。
这样一来不需要和站点协商,不需要 manifest,站点也没有 PWA 也行,站点只能通过页面本身影响窗口,窗口的外壳则由你来配置,站点的离线和推送功能不在这层里。
日常使用的差别
| PWA | 套壳应用(Pake) | |
|---|---|---|
| 离线 | 站点写了 service worker 就能缓存文件 | 不会自动给网站增加离线能力,能否断网使用要看网站和系统网页引擎,并在目标平台实测 |
| 通知 | 系统通知,应用关闭时还能收推送(MDN) | Pake 替换了页面的 Notification 类并把提醒交给系统,没有处理 web push,所以要应用在运行才有提醒 |
| 菜单栏或托盘 | MDN 列的 PWA 能力里没有 | --show-system-tray 可以加,默认关,Mac 上点关闭只隐藏窗口,不退出 |
| 快捷键 | 右键菜单里的应用快捷方式(Edge) | 一套固定快捷键如 Cmd [、Cmd R,--activation-shortcut 可设全局快捷键 |
| 窗口控制 | 由站点的 manifest 决定显示模式 | --width、--height(默认 1200 乘 780)、--always-on-top,Mac 上有 --hide-title-bar |
| 更新 | 走 service worker 的生命周期,新版本要等旧页面都关掉才生效(MDN) | 站点自己更新,外壳要重新构建才会变 |
| 存储 | Safari 的网页应用与 Safari 分开存 | 每个应用有自己的网页视图数据,Windows 上用自己的 WebView2 配置,不和 Chrome 或 Edge 共用 |
通知方面,桌面网页应用里的网站通知讲了 Pake 桥接了什么、没桥接什么。窗口方面,让网页应用保持在最前和自定义网页应用的窗口演示了用法。托盘方面,把网站放进菜单栏或托盘有两个设置。
存储是个不太显眼的差别。Safari 的网页应用把 Cookie 和 Safari 分开,Windows 上的 Pake 应用用自己的 WebView2 配置,不是 Chrome 或 Edge 的,所以在这边登录,另一边不会出现。套壳的 --incognito 更进一步,不保存 Cookie、本地存储和历史,图库里的微信应用每次启动都要重新扫码就是这个原因。
各自更适合什么时候
选 PWA 的情况:
- 站点提供了 PWA,从浏览器装上,站点的离线和推送都还在。
- 需要应用关掉后仍有通知,这属于 web push,Pake 不处理。
- 不想装浏览器以外的东西,Safari 的添加到程序坞一分钟就好,不需要任何工具。
选套壳应用的情况:
- 站点没有 PWA,或者 manifest 很薄,套壳对任意网址都行。
- 想要特定的窗口,比如又窄又高、始终置顶的播放器,没有边框的窗口或者托盘图标。
- 想自己控制构建,命令行可以为 Mac、Windows 和 Linux 构建。
套壳也有自己的限制。Google 在内嵌网页视图里拒绝登录,Pake 的 FAQ 说 macOS 上的 Pake 应用用不了通行密钥和 Touch ID,有些站点前面还有 Cloudflare 验证,系统网页视图可能过不去,第一种情况可以看登录问题说明。遇到拒绝内嵌登录的站点,Pake 的 FAQ 建议改用普通浏览器、浏览器安装的应用或原生客户端,这时 PWA 就是退路,换过去之前先在里面试一次登录。
怎么确认手里是什么
想知道站点有没有 PWA,用 Chrome 或 Edge 打开,看地址栏有没有安装图标,没有的话,Safari 的文件 > 添加到程序坞仍然可用。想知道图标为什么没出现,打开开发者工具,进 Application 面板选 Manifest,Chrome 开发者工具文档说这里会显示解析后的清单,有东西挡住安装时还会多一个 Installability 区块写明原因,比如某个图标加载失败。装好后关掉应用,再从 Dock 或开始菜单打开,看登录状态还在不在。测离线就断网后重开,能加载出来说明站点缓存了,打不开就是没有。
套壳的话,按入门文档配好命令行以后:
pake https://example.com --name Example
退出再打开一次,确认窗口和登录都正常,要测什么可以看把网站变成桌面应用。
常见问题
PWA 是原生应用吗?
不是,MDN 的说法是用网页技术构建、体验接近平台原生应用。
Pake 能做出 PWA 吗?
不能,Pake 做的是一个 Tauri 应用,窗口加载你给的网址,不添加 manifest,也不通过浏览器安装。
哪个启动更快、更省内存?
这里引用的资料都没有测过,两者都用浏览器引擎绘制页面,页面重的话哪边都占内存,同一个站点两种方式各试一次最直接。
