Files
eSIM-Tools/docs/ARCHITECTURE.md
Abner 00a0e58d81 📝 docs: 更新架构与安全文档并扩展测试模块清单
- 更新 CLAUDE.md、docs/ARCHITECTURE.md 中的模块与阶段状态,补充 verify-cookie/health/public-config/notifications 等新节点,并将基础设施阶段由规划中标注为进行中
- 完善 docs/SECURITY.md 的 BFF 代理层与 withAuth 中间件说明,明确 x-esim-key 注入、函数白名单校验以及 CORS/体验验证的统一错误格式化策略
- 更新 src/giffgaff/MODULE_ARCHITECTURE.md 的安全考虑条目,补充 cookie 有效性检查间隔、CSP/Helmet 策略、HTML sanitization(escapeHtml/escapeAttr)以及通过 BFF 代理转发的传输层防护细则
- 扩展 tests/CLAUDE.md 测试范围与表格结构,新增 modules、giffgaff、security 三类的独立测试文件清单,并补充 tests/setup.js 的全局初始化说明
- 调整脚本与模块文档:scripts/CLAUDE.md 新增部署与构建相关脚本清单;src/js/modules/CLAUDE.md 更新 CaptchaManager 集成说明与模块覆盖状态,补充 notification-service/browser-utils 等相关条目
2026-06-02 22:50:26 +08:00

6.1 KiB
Raw Blame History

eSIM-Tools 架构说明

当前架构

概述

eSIM-Tools 是一个 Web 应用,用于管理 Giffgaff 和 Simyo 运营商的 eSIM 激活。采用无服务器架构Netlify Functions 作为后端 API静态托管作为前端。

技术栈

  • 前端: 原生 JavaScript, Bootstrap, PWA
  • 后端: Node.js/Express (本地开发), Netlify Functions (生产环境)
  • 构建工具: Webpack, Babel, PostCSS
  • 优化工具: Sharp (图片), Terser (JS), Workbox (Service Worker)

部署架构

用户请求 → Netlify CDN (静态资源) → Netlify Functions (API) → 运营商 API
                ↓
        Edge Functions (BFF 代理层,注入 ACCESS_KEY)

模块依赖关系

┌─────────────────────────────────────────────────────────┐
│                    前端层 (Browser)                      │
├─────────────────────────────────────────────────────────┤
│  index.html → src/giffgaff/ → src/js/modules/          │
│              src/simyo/    → (通用工具模块)              │
└─────────────────────────────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│                 Edge Functions (BFF)                    │
│         netlify/edge-functions/bff-proxy.js             │
│              (ACCESS_KEY 注入 + 请求转发)                │
└─────────────────────────────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│              Netlify Functions (Serverless)              │
├─────────────────────────────────────────────────────────┤
│  giffgaff-token-exchange.js    giffgaff-graphql.js      │
│  giffgaff-mfa-challenge.js     giffgaff-sms-activate.js │
│  giffgaff-mfa-validation.js    auto-activate-esim.js    │
│  verify-cookie.js              health.js                 │
│  public-config.js              notifications.js          │
│  notifications-internal.js                                │
│  _shared/middleware.js  _shared/internal-headers.js       │
└─────────────────────────────────────────────────────────┘

关键设计决策

  1. 无框架设计: 使用原生 JavaScript 避免框架依赖,保持最小打包体积
  2. BFF 模式: Edge Functions 作为 Backend-For-Frontend 代理层,注入 ACCESS_KEY 并转发请求
  3. 中间件统一: 通过 withAuth 中间件统一处理鉴权、CORS、验证
  4. 原生 ES6 模块: 业务页面不经 Webpack 打包,按需加载

构建优化

1. 图片处理速度提升 2.4 倍 (scripts/optimize-images.js)

问题: 旧脚本串行处理图片10 张图片需要 60 秒。

方案: 改为并行处理(可配置并发数),加入智能缓存跳过已优化文件,支持 mozjpeg 和 adaptive filtering 压缩。

效果: 处理时间从 60 秒降至 25 秒,压缩率提升 30-40%。

2. 压缩率提升 15-20% (scripts/compress.js)

问题: 旧压缩脚本仅使用 Gzip且每次都全量压缩。

方案: 同时生成 Brotli + Gzip 双版本,加入基于缓存的跳过逻辑避免重复压缩。

效果: 压缩率提升 15-20%,后续构建只需压缩变更文件。

3. 滚动性能提升,内存泄漏消除 (src/js/performance.js)

问题: Intersection Observer 未清理导致内存泄漏,图片在进入视口后才开始加载。

方案: 统一 Observer 生命周期管理,视口前预加载图片,加入错误处理。

效果: 内存使用减少 10-15%,滚动更流畅。

4. 打包体积减少 25%,长期缓存更优 (webpack.config.js)

问题: 打包体积 ~450KB (gzip),第三方库未分离,缓存命中率低。

方案: 拆分第三方 chunk提取 runtime使用确定性模块 ID加入 Brotli 插件和 500KB 性能预算。

效果: 打包体积降至 ~340KB (gzip) / ~280KB (brotli)。

5. 通用工具函数库 (src/js/modules/utils.js)

提供 debounce (leading/trailing)、throttle (RAF)、记忆化、指数退避重试、bytes/JSON 格式化等常用工具。

6. 请求验证与安全防护 (src/js/middleware/validation.js)

提供请求体大小验证、Header 校验、XSS 清理、内存级速率限制、请求计时日志和异步错误边界。


性能基准

以下数据基于 Lighthouse 测量Chrome DevTools模拟 4G 网络):

优化前

  • 打包体积: ~450KB (gzip)
  • 图片优化: 10 张图片 60 秒
  • First Contentful Paint: 1.8s
  • Time to Interactive: 3.2s

优化后

  • 打包体积: ~340KB (gzip), ~280KB (brotli)
  • 图片优化: 10 张图片 25 秒 (2.4x 提升)
  • First Contentful Paint: 1.2s (提升 33%)
  • Time to Interactive: 2.1s (提升 34%)

实施路线

阶段 1: 代码质量 (已完成)

  • 优化构建工具
  • 添加工具库
  • 改进错误处理
  • 添加验证中间件

阶段 2: 基础设施 (进行中)

  • Sentry 监控 (前后端)
  • 内存级速率限制 (_shared/rate-limiter.js)
  • 添加 Redis 缓存
  • 添加端到端测试

更多未来架构规划请参考 FUTURE_ARCHITECTURE.md