Blazor 支持渐进式应用开发,也就是 PWA。利用 PWA 模式,能让 web 应用拥有原生应用般的体验。现在就来聊聊怎么用 Blazor 构建一个 PWA。
先说说啥是 PWA。
PWA 应用是通过特定技术和标准模式开发的 web 应用,兼具 web 应用和原生应用的特性。
举例来说,web 应用更容易被发现,访问一个网站比安装应用明显更便捷快速,还能通过链接分享。而原生应用与操作系统整合得更好,能为用户带来无缝体验。安装原生应用后,即使离线也能运行,而且用户更喜欢点击主页图标来访问喜爱的应用。
PWA 让我们有能力创建同时拥有这两种优势的应用。这可不是新观念,过去在 web 平台上,通过多种方法多次出现过类似想法。渐进式增强和响应式设计能构建对移动端友好的网站。多年前的 Firefox OS 生态系统中,离线运行和安装 web 应用就已成为可能。PWA 不仅如此,还提供更多特性,让 web 更出色。
说白了,PWA 能让你的 web 程序像普通应用一样运行,有桌面图标,能离线,没有浏览器地址栏,看起来就像普通程序或 APP。
那怎么用 Blazor 构建一个 PWA 呢?
用 VS 创建一个 Blazor 程序,选择 Webassembly 模式,并勾选支持 PWA。
支持 PWA 的 Blazor 程序主要多了几样东西:
manifest.json,这是个清单文件,程序安装到设备上时会读取其中信息,比如名称、图标、语言等。
service-worker.js,它用于运行后台任务,与浏览器主进程隔离,不阻塞页面。我们可以用它实现一些功能,比如过滤所有 fetch/xhr 请求,决定哪些走缓存,哪些不走;还能在后台悄悄拉取数据缓存起来。项目里有两个 service-worker.js 文件,一个是开发时用的,没什么逻辑,另一个是发布时的,有一些缓存逻辑。
如果是 PWA 程序,在浏览器地址栏右侧有个图标,点击可安装到本地,安装完会在桌面生成图标,打开后是没有浏览器地址栏的界面。这样一个 PWA 程序就可以运行了。
离线运行很关键。如果只是没有浏览器地址栏,那 PWA 吸引力可不大。个人觉得 PWA 最大魅力就是能离线运行,没网络也能照常使用,这才像原生编写的程序。
修改 service-worker,离线原理很简单,就是把请求的数据缓存起来,一般是缓存 Get 请求,像各种页面图片等。修改 service-worker.js,把 GET 请求全部缓存起来。当然,实际情况不会这么简单。为了能缓存页面,必须先在线运行成功一次。
模拟离线,修改完 js 并在线正常运行一次后,能看到所有 GET 请求的资源都被缓存起来了。
总结一下,用 Blazor 能快速开发 PWA 应用。借助 PWA 和 Blazor Webassembly 的特性,可以开发出类似桌面的应用程序。或许这是跨平台桌面应用开发除了 electron 之外的又一种选择。