MAUI PicoServer PWA离线系统,如何构建本地Web App?
摘要:MAUI 嵌入式 Web 架构实战(九) PicoServer + PWA 离线系统:构建真正的本地 Web App 源码地址: https:github.comdensen2014MauiPicoAdmin 在前
MAUI 嵌入式 Web 架构实战(九)
PicoServer + PWA 离线系统:构建真正的本地 Web App
源码地址:
https://github.com/densen2014/MauiPicoAdmin
在前面的系列文章中,我们已经逐步构建了一个完整的 PicoServer 本地 Web Admin 系统:
MAUI 内嵌 Web Server
REST API 架构
Web Admin 管理后台
WebSocket 实时通信
Controller 自动发现与插件化
现在系统已经具备:
Web UI
↓
REST API
↓
MAUI 本地服务
↓
SQLite / 设备
但仍然存在一个问题:
如果浏览器离线,系统还能运行吗?
答案是:可以。
通过 PWA(Progressive Web App)+ Service Worker,我们可以让 Web Admin 具备:
离线运行
本地缓存
后台同步
自动更新
最终实现:
PicoServer + PWA = 本地 Web 应用平台
一、系统整体架构
完整架构如下:
Browser / WebView
│
Service Worker
│
┌───────────┴───────────┐
│ │
Cache Storage IndexedDB
│ │
│ │
└───────────┬───────────┘
│
PicoServer
│
REST API
│
MAUI
│
SQLite / Device
说明:
Cache Storage
用于缓存:
HTML
JS
CSS
Images
IndexedDB
用于缓存:
商品列表
订单
离线单据
同步队列
Service Worker
负责:
请求拦截
离线缓存
后台更新
二、PWA 基础组件
PWA 主要由三个部分组成。
1 Manifest
manifest.json:
{
"name": "Pico Admin",
"short_name": "PicoAdmin",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#1976d2",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png"
}
]
}
作用:
允许网页 安装为 App
定义图标
定义启动方式
2 注册 Service Worker
在前端入口:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(reg => {
console.log("SW registered");
});
}
三、缓存策略设计
在离线系统中,不同资源需要不同策略。
