Skip to content

Commit 4219bf8

Browse files
committed
refactor: optimize service worker cache strategy and remove unused code
1 parent 9e316db commit 4219bf8

18 files changed

Lines changed: 6859 additions & 6676 deletions

.github/workflows/ci_frontend.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ jobs:
2525

2626
- name: Run frontend syntax check
2727
run: |
28-
node -c static/script.js
29-
node -c static/html_export.js
28+
for f in static/script.js static/app_*.js static/html_export.js; do
29+
echo "Checking $f..."
30+
node -c "$f"
31+
done
3032
3133
frontend_e2e:
3234
name: Frontend E2E (Playwright)

AGENTS.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ RoadbookMaker 是一个基于网页的地图标记与行程规划工具:
99
- **前端**`static/` 下的纯原生 JavaScript + Leaflet,直接在浏览器运行,无构建步骤。核心文件:
1010
- `static/index.html`:入口 HTML。
1111
- `static/style.css`:样式定义(含 CSS 变量实现的明亮/暗色模式)。
12-
- `static/script.js`:核心地图逻辑、交互与状态管理。
12+
- `static/script.js``RoadbookApp` 主入口与类骨架,保留全局配置、`constructor``init()``bindEvents()`、分享导入/移动端/调试等主流程。
13+
- `static/app_*.js`:按职责拆分的前端模块,通过 `RoadbookApp.prototype` 扩展主类。当前包含 `app_utils.js``app_theme.js``app_history.js``app_search.js``app_ai.js``app_date_filter.js``app_date_notes.js``app_sidebar.js``app_detail_panels.js``app_tooltips.js``app_map.js``app_io.js`
1314
- `static/help_tour.js`:新手引导(罩子高亮 + tooltip + 自动演示点/线/日程编辑)。
1415
- `static/online_mode.js`:在线模式 API 交互。
1516
- `static/ai_assistant.js`:AI 助手功能,实现自然语言驱动的地图操作。
@@ -57,7 +58,9 @@ RoadbookMaker 是一个基于网页的地图标记与行程规划工具:
5758

5859
### 前端(`static/`
5960

60-
- 无框架:主要逻辑集中在 `static/script.js`(地图、标记点、连接线、费用记录 `dateNotes`、导入导出等)、`static/online_mode.js`(在线模式/云端保存/登录)与 `static/ai_assistant.js`(AI 助手)。
61+
- 无框架:主入口是 `static/script.js`,核心业务已拆到 `static/app_*.js``static/online_mode.js` 负责在线模式/云端保存/登录,`static/ai_assistant.js` 负责 AI 助手。
62+
- 前端模块约定:`script.js` 必须先于 `app_*.js` 加载,由 `script.js` 定义 `RoadbookApp`,再由各模块扩展 `RoadbookApp.prototype`
63+
- 若修改 `index.html` 脚本顺序,必须保证 `window.app = new RoadbookApp()` 执行前,所有 `app_*.js` 已经完成注册。
6164
- 新手引导:`static/help_tour.js`(罩子高亮 + 步骤引导;入口在帮助面板 `` 内)
6265
- 调试逻辑独立于 `static/debug.js`,通过 `DebugModule` 类实现,仅在需要时被调用。
6366
- 在线 token 存储:`localStorage` 的 key 为 `online_token`(见 `static/online_mode.js:6`)。
@@ -194,12 +197,12 @@ Gin 内置了一个“允许来源列表 + 可选 null origin”逻辑:
194197

195198
- 默认只运行**新增/修改的那几个用例文件**,不要一次性跑全量(除非用户明确要求)。
196199
- 推荐命令:`cd test && npm run test:local -- tests/<your-new>.spec.mjs`
197-
- 修改前端 JS 后必须做语法检查:`node -c static/script.js`(其它前端文件同理)。
200+
- 修改前端 JS 后必须做语法检查:`for f in static/script.js static/app_*.js static/html_export.js; do node -c "$f"; done`
198201

199202
### 代码组织规则
200-
- **代码组织**: 尽量避免直接向 `static/script.js` 中添加新功能。考虑到该文件已非常庞大,新增逻辑应优先考虑:
201-
- `static/` 目录下创建新的 JS 文件(例如 `static/new_feature.js`)来封装新功能
202-
- 或者,将新功能逻辑添加到与该功能最相关的现有 JS 模块中(例如,导出相关的功能应添加到 `html_export.js`
203+
- **代码组织**: `static/script.js` 现在主要承担主入口与类骨架职责。新增前端逻辑时,优先放入最相关的现有 `static/app_*.js` 模块;只有在职责边界明确且现有模块都不合适时,才新增新的模块文件。
204+
- **入口约束**: `static/script.js` 顶部仍承载 `apiBaseUrl` 与版本号初始化,且 GitHub Pages 工作流会向该文件首行注入 `window.API_BASE_URL`;不要把这段入口逻辑移走
205+
- **加载约束**: 若新增新的 `static/app_*.js` 文件,必须同步更新 `static/index.html``static/sw.js``.github/workflows/ci_frontend.yml`
203206

204207
## 10. 调试模式 (Debug Mode)
205208

@@ -221,10 +224,10 @@ RoadbookMaker 实现了 Progressive Web App (PWA) 支持,提供类原生应用
221224
### 核心文件
222225

223226
- **`static/manifest.json`**:Web App Manifest,定义应用名称、图标、主题色及显示模式(Standalone)。
224-
- **`static/sw.js`**:Service Worker 脚本,实现 Stale-While-Revalidate 缓存策略
225-
- 预缓存列表 (`CACHE_NAME`)`index.html`, `style.css`, `script.js` 及所有核心 JS 模块。
226-
- 外部资源缓存:包括 Leaflet CSS/JS 及图标文件
227-
- 更新机制:Service Worker 更新时会自动清理旧缓存(`activate` 事件)
227+
- **`static/sw.js`**:Service Worker 脚本。导航请求走 `Network First`,静态资源走 `Stale-While-Revalidate`
228+
- 预缓存列表:`index.html`, `style.css`, `script.js` 及所有核心 JS 模块。
229+
- 运行时缓存:同源静态资源与 `unpkg` CDN 资源按需写入运行时缓存,不再因为外部 CDN 预缓存失败而让安装整体失败
230+
- 更新机制:缓存名由资源清单 + 手动 schema 版本共同生成,`activate` 时仅清理旧的 `roadbook-*` 缓存
228231

229232
### 交互逻辑
230233

README.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,9 +380,15 @@ RoadbookMaker 支持 PWA (Progressive Web App),您可以将其安装到手机
380380
roadbook/
381381
├── static/ # 前端静态文件
382382
│ ├── index.html # 主页面
383-
│ ├── script.js # 核心JavaScript逻辑
383+
│ ├── script.js # RoadbookApp 主入口与类骨架
384+
│ ├── app_*.js # 按职责拆分的前端模块
384385
│ ├── style.css # 样式文件
386+
│ ├── debug.js # 调试模块
387+
│ ├── help_tour.js # 新手引导
388+
│ ├── online_mode.js # 在线模式
389+
│ ├── ai_assistant.js # AI 助手 UI 与编排
385390
│ ├── html_export.js # HTML导出功能
391+
│ ├── sw.js # PWA 与缓存逻辑
386392
│ └── favicon.png # 网站图标
387393
├── backend/ # 后端API服务
388394
│ ├── cmd/roadbook-api/ # 主程序入口
@@ -404,6 +410,22 @@ roadbook/
404410
- 使用原生JavaScript,无需构建步骤
405411
- 支持现代浏览器(Chrome 60+, Firefox 55+, Safari 12+)
406412
413+
### 前端脚本结构
414+
- 前端运行入口仍是 `static/script.js`,但核心逻辑已经拆分到多个 `static/app_*.js` 文件中,并通过 `RoadbookApp.prototype` 挂回主类
415+
- `static/script.js`:`RoadbookApp` 主入口与类骨架,保留全局配置、构造器、`init()`、`bindEvents()`、分享导入、移动端、调试与 PWA 启动逻辑
416+
- `static/app_utils.js`:通用工具方法(图标、格式化、弹窗、距离、箭头、小红书链接等)
417+
- `static/app_theme.js` / `static/app_history.js`:主题切换、撤销/历史记录
418+
- `static/app_search.js` / `static/app_ai.js`:搜索系统、AI 助手可调用接口
419+
- `static/app_date_filter.js` / `static/app_date_notes.js` / `static/app_sidebar.js`:日期筛选、费用备注、侧边栏日程列表
420+
- `static/app_detail_panels.js` / `static/app_tooltips.js`:详情面板、扩大编辑、tooltip 与 Logo 预览
421+
- `static/app_map.js` / `static/app_io.js`:地图核心、标记点/连接线、导入导出与本地存储
422+
423+
### 前端维护约定
424+
- 新增前端功能时,优先修改对应的 `static/app_*.js` 模块,而不是继续把实现堆回 `static/script.js`
425+
- `static/index.html` 中的脚本顺序不能随意打乱:必须先加载 `script.js`,再加载各个 `app_*.js`
426+
- 如果新增新的本地核心脚本,需要同步更新 `static/index.html`、`static/sw.js` 与 `.github/workflows/ci_frontend.yml`
427+
- 推荐语法检查命令:`for f in static/script.js static/app_*.js static/html_export.js; do node -c "$f"; done`
428+
407429
### 后端开发
408430
- 后端代码使用Go语言编写
409431
- 主要API端点:

0 commit comments

Comments
 (0)