建立渐进式网页应用程序常用许多技术。若一个网页应用符合安装标准,能离线运作并能被加入装置主画面,即可视为 PWA。要符合这些定义,所有 PWA 最少需要有清单(manifest)与服务工作者(service worker)。[32][33][34] 其他技术则用来储存资料、与服务器通讯或执行程式码。
Manifest
编辑
网页应用程序清单(web app manifest)[35] 是由 万维网联盟(W3C)制定的一项规范,定义了一种基于 JSON 的清单格式(通常标示为 manifest.json)[31],供服务工作者(Service worker)将与网页应用程序相关的 元资料 集中管理,包含:
网页应用程序的名称
网页应用程序图示或图片物件的连结
启动或开启网页应用程序的首选 URL
网页应用程序的设定资料
网页应用程序的预设画面方向
设定显示模式的选项,例如全萤幕
这些元资料对于应用程序能够加入主画面或被列为与原生应用程序并列的项目至关重要。
iOS 支援
编辑
iOS Safari 浏览器对 manifest 不完全支援,但大部分的 PWA 元资料可以透过苹果专用的 meta 标签扩充定义。这些标签允许开发者启用全萤幕显示、定义图示与启动画面(splash screen)、并指定应用程序名称。[36][37]
Service workers
编辑
服务工作者(service worker)是一种 web worker,实作了一个可编程化的网络代理,可以回应主文件发出的网络/HTTP 请求。它能够检查远端服务器的可用性,在服务器可用时快取内容,并于后续提供给文件使用。服务工作者与主文件执行绪分离运作。服务工作者可处理 推播通知、背景资料同步、快取或取回资源请求、拦截网络请求,并且能在注册它们的文件尚未载入时独立接收集中更新。[38]
服务工作者经历三个阶段的生命周期:注册(Registration)、安装(Installation)与启用(Activation)。注册是告诉浏览器服务工作者的位置,为安装做准备。安装发生在浏览器尚无此服务工作者,或发现服务工作者有更新时。启用发生在 PWA 的所有页面都关闭后,以避免旧版本与新版本冲突。此生命周期设计也有助于保持版本切换的一致性,因为同一网域同时只能有一个活动中的服务工作者。[38]
WebAssembly
编辑
主条目:WebAssembly
WebAssembly 允许 预编译 的程式码在浏览器中以近乎原生的速度执行。[39] 因此,像是 C 这类语言写成的函式库可以被加入网页应用程序中。WebAssembly 于 2015 年宣布,2017 年 3 月首次释出,并于 2019 年 12 月 5 日成为 W3C 推荐标准(W3C Recommendation)。[40][41] 并于 2021 年获得 编程语言软件奖(Programming Languages Software Award),该奖项由 美国计算机协会(ACM)SIGPLAN 颁发。[42]
资料储存
编辑
渐进式网页应用程序(Progressive Web App,PWA)的执行环境可能会在某些情况下被卸载,因此 PWA 需要以以下其中一种方式来储存大部分的长期内部状态(使用者资料、动态载入的应用资源):
网页储存 (Web Storage):Web Storage 是 W3C 的标准 API,允许在现代浏览器中进行键值储存。此 API 包含两个物件,sessionStorage(提供只在会话期间有效,浏览器会话结束时清除的储存空间)和 localStorage(提供跨会话持久储存空间)。[43]
索引数据库 API (Indexed Database API):Indexed Database API 是一个 W3C 标准的数据库 API,在所有主要浏览器中都可使用。此 API 受现代浏览器支援,能够储存 JSON 物件及任何可表示为字串的结构。[44] Indexed Database API 也可以搭配封装库(wrapper library)使用,以提供更多结构化功能。