编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 性能优化实践

  • 程序编程原理

  • 稳定性与可靠性

  • 工程化与运维

  • 方案设计思想

    • README
    • 架构与组件

    • 数据与存储

    • 通信与协议

    • 稳定性与安全

    • 端侧专项性

      • IoT框架设计方案
      • 动态化技术方案设计
        • 01.提审被拒的 24 小时
          • 1.1 紧急上线遇阻
          • 1.2 业务受损链路
          • 1.3 反思动态化设计
        • 02.要解决的核心矛盾
          • 2.1 发版周期之痛
          • 2.2 性能与灵活
          • 2.3 安全与监管
          • 2.4 动态化的本质
        • 03.业界主流方案
          • 03.1 四大技术路线
          • 03.2 横向对比矩阵
          • 03.3 适用场景速查
        • 04.设计核心原则
          • 04.1 边界清晰原则
          • 04.2 性能可控原则
          • 04.3 灰度回滚原则
          • 04.4 安全合规原则
        • 05.方案落地实战
          • 05.1 整体架构
          • 05.2 H5 容器方案
          • 05.3 RN/Flutter 方案
          • 05.4 DSL 渲染方案
          • 05.5 配置驱动方案
        • 06.关键问题解决
          • 06.1 加载性能问题
          • 06.2 容器与原生通信
          • 06.3 监管合规问题
        • 07.常见陷阱与反例
          • 07.1 全员动态化反例
          • 07.2 无降级反例
          • 07.3 性能黑洞反例
        • 08.演进路线
          • 08.1 V1 H5 起步
          • 08.2 V2 跨端 + 容器
          • 08.3 V3 多技术混合
        • 09.总结与决策
          • 09.1 上线检查表
          • 09.2 选型决策树
      • 跨端一致性方案
      • 国际化实践方案
      • 离线包与预加载方案
    • 研发的效能

  • 专栏
  • 方案设计思想
  • 端侧专项性
杨充
2025-02-19
目录

动态化技术方案设计

# 23.动态化技术方案设计

本篇定位:动态化是移动端的"换肤大法"——不发版就能更新页面、改逻辑、改样式。本文从一次"App 提审被拒急救"的故事讲起,回答三个核心问题——为什么需要动态化?业界四大技术路线怎么选?怎么设计一套既稳又灵活的动态化方案?

# 目录介绍

  • 01.提审被拒的 24 小时
    • 1.1 紧急上线遇阻
    • 1.2 业务受损链路
    • 1.3 反思动态化设计
  • 02.要解决的核心矛盾
    • 2.1 发版周期之痛
    • 2.2 性能与灵活
    • 2.3 安全与监管
    • 2.4 动态化的本质
  • 03.业界主流方案
    • 03.1 四大技术路线
    • 03.2 横向对比矩阵
    • 03.3 适用场景速查
  • 04.设计核心原则
    • 04.1 边界清晰原则
    • 04.2 性能可控原则
    • 04.3 灰度回滚原则
    • 04.4 安全合规原则
  • 05.方案落地实战
    • 05.1 整体架构
    • 05.2 H5 容器方案
    • 05.3 RN/Flutter 方案
    • 05.4 DSL 渲染方案
    • 05.5 配置驱动方案
  • 06.关键问题解决
    • 06.1 加载性能问题
    • 06.2 容器与原生通信
    • 06.3 监管合规问题
  • 07.常见陷阱与反例
    • 07.1 全员动态化反例
    • 07.2 无降级反例
    • 07.3 性能黑洞反例
  • 08.演进路线
    • 08.1 V1 H5 起步
    • 08.2 V2 跨端 + 容器
    • 08.3 V3 多技术混合
  • 09.总结与决策
    • 09.1 上线检查表
    • 09.2 选型决策树

# 01.提审被拒的 24 小时

# 1.1 紧急上线遇阻

某电商 App 双 11 前 3 天,业务方临时加了个营销活动入口——结果苹果 App Store 审核 48 小时还没过。但活动双 11 当天就要上线——只剩 24 小时。

gantt
    title 紧急上线时间线
    dateFormat HH:mm
    axisFormat %H:%M
    
    section 业务期望
    活动准备     :a, 00:00, 24h
    双 11 开始   :crit, b, 24:00, 0m
    
    section 苹果审核
    提交审核     :c, 00:00, 0m
    审核中       :crit, d, 00:00, 48h
    
    section 实际进展
    审核未过     :crit, e, 24:00, 24h
    活动开始无入口 :crit, f, 24:00, 0m
    GMV 损失 800w :crit, g, 24:00, 24h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

最终结局:审核 72 小时才过——双 11 第一天没有活动入口——直接损失 800 万 GMV。

# 1.2 业务受损链路

flowchart TD
    A[业务方临时需求] --> B[原生改代码]
    B --> C[需要发版]
    C --> D{苹果审核}
    
    D -->|顺利 24h 内| Pass1[赶上活动]
    D -->|被拒 48-72h| Fail[错过黄金时机]
    
    Cause[根因] --> R1[关键入口没用动态化]
    Cause --> R2[原生代码改一点都得发版]
    Cause --> R3[发版完全依赖苹果审核]
    
    Solve[解药] --> S1[运营页面 → H5]
    Solve --> S2[关键模块 → DSL/RN 远程下发]
    Solve --> S3[配置项 → 配置中心动态下发]
    
    style Fail fill:#ffebee
    style Solve fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 1.3 反思动态化设计

事后这个团队总结了三个最深刻的教训:

  1. 运营 / 营销类内容必须动态化——这类内容最敏感于"上线节奏"
  2. 配置类内容必须可远程下发——一个开关、文案、图片不能要求发版
  3. 核心交易流程不要轻易动态化——稳定性 > 灵活性

动态化不是"越多越好"——它是把"灵活性"和"稳定性"做权衡的艺术。

# 02.要解决的核心矛盾

# 2.1 发版周期之痛

原生发版的现实:

节点 耗时
开发 + 测试 1-3 天
提审 iOS 24-72 小时
灰度发布 1-3 天
100% 触达用户 7-14 天
完整发版周期 2-3 周

而业务需求的现实:明天就要上!

# 2.2 性能与灵活

graph LR
    A[原生<br/>极高性能] --> B[完全静态]
    A --> C[体验最好]
    
    A2[H5<br/>完全动态] --> B2[体验差]
    A2 --> C2[启动慢]
    
    A3[RN/Flutter<br/>跨端中间态] --> B3[体验接近原生]
    A3 --> C3[包大小增加]
    
    A4[DSL 渲染<br/>结构化动态] --> B4[体验好]
    A4 --> C4[表达能力受限]
    
    style C fill:#e8f5e8
    style C2 fill:#ffebee
    style B3 fill:#fff3e0
    style B4 fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2.3 安全与监管

苹果的红线(iOS Guidelines 4.7):

  • ❌ 不允许下发"可执行代码"绕过审核 → JSPatch 一类被禁
  • ✅ 数据驱动的内容(H5、JSON 配置)允许
  • ✅ 官方支持的跨端框架(RN/Flutter)允许

安卓相对宽松,但合规上:

  • 需要符合监管要求(金融类需要银监会备案)
  • 不能下发"非声明的功能"

# 2.4 动态化的本质

动态化 = 把"程序"拆成"骨架(壳)+ 血肉(内容)"——壳子稳定,血肉可换

它的核心追求 = 解耦发版节奏与业务节奏。

# 03.业界主流方案

# 03.1 四大技术路线

路线 代表 思路
WebView/H5 Hybrid 容器 网页就是动态化
跨端框架 RN/Flutter/Weex 自建 JS/Dart 引擎
DSL 渲染 Tangram/LSX/Doraemon JSON 描述布局,原生渲染
配置驱动 配置中心 + 模板 数据驱动 UI,最轻量

# 03.2 横向对比矩阵

维度 H5 RN Flutter DSL 配置驱动
性能 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
动态性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
包大小增量 0 5MB+ 4MB+ 1MB 0
学习成本 低 中 高 中 低
社区生态 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 厂商定制 极简
苹果合规 ✅ ✅ ✅ ✅ ✅
典型代表 几乎所有 App 携程/京东 阿里/字节部分 阿里 Tangram 全员

# 03.3 适用场景速查

flowchart TD
    Q1{页面类型?} --> Q2[运营/营销活动]
    Q1 --> Q3[核心交易流程]
    Q1 --> Q4[内容展示]
    Q1 --> Q5[复杂交互]
    
    Q2 --> H5[H5 / 配置驱动]
    Q3 --> Native[原生 + 配置]
    Q4 --> DSL[DSL 渲染]
    Q5 --> RN[RN / Flutter]
    
    style H5 fill:#e3f2fd
    style Native fill:#e8f5e8
    style DSL fill:#fff3e0
    style RN fill:#f3e5f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 04.设计核心原则

# 04.1 边界清晰原则

铁律:核心稳定,边缘灵活。

graph TB
    Core[核心稳定层<br/>原生 + 测试覆盖]
    Core --> C1[支付流程]
    Core --> C2[登录注册]
    Core --> C3[关键 SDK]
    
    Edge[边缘灵活层<br/>动态化]
    Edge --> E1[运营活动]
    Edge --> E2[首页推荐]
    Edge --> E3[文案/样式]
    Edge --> E4[新业务试点]
    
    Note[原则: 涉及钱、隐私的不动态化<br/>变化频繁、可控的可动态化]
    
    style Core fill:#e8f5e8
    style Edge fill:#fff3e0
    style Note fill:#e3f2fd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 04.2 性能可控原则

首屏可见时间是动态化的命门:

方案 典型首屏耗时
原生 200-500ms
DSL 渲染 300-800ms
RN/Flutter 800ms-2s
H5(无优化) 2-5s
H5(容器预热 + 离线包) 500ms-1s

优化手段:

  • 离线包预下载(详见 26 篇)
  • WebView 预创建池
  • 接口预请求(页面打开前先发请求)
  • 骨架屏占位

# 04.3 灰度回滚原则

动态化的 sword(剑)也是 risk(险)——下发错了等于"线上故障"。

flowchart TD
    Publish[发布动态化资源] --> Gray1[灰度 1% 用户]
    Gray1 --> Monitor1{异常率监控}
    Monitor1 -->|正常| Gray2[10%]
    Monitor1 -->|异常| Rollback1[立即回滚]
    
    Gray2 --> Monitor2{异常率监控}
    Monitor2 -->|正常| Gray3[50%]
    Monitor2 -->|异常| Rollback2[立即回滚]
    
    Gray3 --> Full[100%]
    
    style Rollback1 fill:#ffebee
    style Rollback2 fill:#ffebee
    style Full fill:#e8f5e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

关键能力:

  • 灰度按用户/地域/设备维度切片
  • 客户端兜底:动态化失败 → 降级到原生 / 兜底页
  • 秒级回滚:通过配置中心立即推送

# 04.4 安全合规原则

mindmap
  root((安全合规))
    苹果合规
      不下发可执行代码
      用官方支持的跨端
      JSPatch 已死
    资源签名
      防中间人篡改
      包完整性校验
    权限隔离
      H5 容器沙箱
      JSBridge 白名单
    监管要求
      金融类备案
      用户数据合规
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 05.方案落地实战

# 05.1 整体架构

graph TB
    subgraph "客户端"
        Shell[原生壳<br/>稳定层]
        Native[原生页面]
        H5[H5 容器]
        RN[RN 容器]
        DSL[DSL 渲染]
        Bridge[JSBridge]
    end
    
    subgraph "下发服务"
        CDN[CDN 静态资源]
        Config[配置中心]
        Pack[离线包服务]
        Bundle[Bundle 服务]
    end
    
    subgraph "管理后台"
        Console[运营后台]
        Editor[可视化编辑器]
        Gray[灰度控制]
        Monitor[监控告警]
    end
    
    Shell --> Native & H5 & RN & DSL
    H5 & RN & DSL --> Bridge --> Native
    
    H5 --> CDN & Pack
    RN --> Bundle
    DSL --> Config
    Native --> Config
    
    Console --> Editor & Gray & Monitor
    Editor --> CDN & Pack & Bundle & Config
    
    style Shell fill:#e8f5e8
    style Bridge fill:#fff3e0
    style Console fill:#e3f2fd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 05.2 H5 容器方案

Hybrid H5 容器的核心能力:

graph TB
    H5Page[H5 页面] --> Container[原生 H5 容器]
    
    Container --> Cap1[WebView 预热池]
    Container --> Cap2[离线包加载]
    Container --> Cap3[JSBridge 通信]
    Container --> Cap4[原生导航栏定制]
    Container --> Cap5[白屏检测]
    Container --> Cap6[资源拦截缓存]
    
    JSB[JSBridge 能力] --> JB1[设备信息]
    JSB --> JB2[支付能力]
    JSB --> JB3[分享]
    JSB --> JB4[扫码]
    JSB --> JB5[地理位置]
    
    style Container fill:#e8f5e8
    style JSB fill:#fff3e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 05.3 RN/Flutter 方案

RN bundle 动态下发:

sequenceDiagram
    participant App as App
    participant Server as Bundle 服务
    participant CDN as CDN
    
    App->>App: 启动时检查更新
    App->>Server: 查询版本 当前 v1.0
    Server-->>App: 最新 v1.2 + diff URL
    
    App->>CDN: 下载 diff 包
    CDN-->>App: diff.zip
    
    App->>App: 合并 diff 生成 v1.2
    App->>App: 校验签名 + 哈希
    App->>App: 下次启动用 v1.2
    
    Note over App: 失败时回滚到 v1.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

关键设计:

  • diff 增量下发(包大小 100KB vs 全量 5MB)
  • 签名校验(防中间人)
  • 多版本共存(A/B 实验)
  • 失败回退

# 05.4 DSL 渲染方案

JSON 描述 UI,原生渲染:

{
    "type": "linear",
    "orientation": "vertical",
    "children": [
        {
            "type": "image",
            "url": "https://xxx.png",
            "height": 200
        },
        {
            "type": "text",
            "content": "限时秒杀",
            "fontSize": 24,
            "color": "#FF0000"
        },
        {
            "type": "button",
            "text": "立即抢购",
            "action": {
                "type": "openUrl",
                "url": "/order"
            }
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

核心组件:

graph LR
    JSON[JSON 配置] --> Parser[DSL 解析器]
    Parser --> Builder[组件树构建]
    Builder --> Render[原生组件渲染]
    
    Action[Action 引擎] --> Click[点击/跳转]
    Action --> Track[埋点]
    
    style Render fill:#e8f5e8
1
2
3
4
5
6
7
8
9

典型代表:阿里 Tangram、字节 LSX、京东 JSCar。

# 05.5 配置驱动方案

最轻量的动态化:开关、文案、图片远程下发。

# 远程配置示例
features:
  newCheckoutFlow: true       # 新结算流程开关
  showLiveStreaming: false    # 直播入口
  
copy:
  homeBanner: "限时秒杀 5 折起"
  payButton: "立即支付"
  
images:
  splash: "https://cdn/.../splash_v2.png"
  
limits:
  maxFileSize: 50  # MB
  cacheExpireHour: 24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

好处:

  • 几乎零成本
  • 所有原生页面都受益
  • 改个文案不用发版

# 06.关键问题解决

# 06.1 加载性能问题

典型 H5 优化套路:

flowchart LR
    Open[用户点击] --> P1[1 WebView 预创建池]
    P1 --> P2[2 离线包本地加载]
    P2 --> P3[3 接口预请求]
    P3 --> P4[4 骨架屏占位]
    P4 --> Render[首屏 < 800ms]
    
    style Render fill:#e8f5e8
1
2
3
4
5
6
7
8

WebView 预创建池:

// App 启动时预创建
class WebViewPool {
    private val pool = mutableListOf<WebView>()
    
    fun preheat(count: Int = 2) {
        repeat(count) { pool.add(createWebView()) }
    }
    
    fun acquire(): WebView = pool.removeFirstOrNull() ?: createWebView()
}
1
2
3
4
5
6
7
8
9
10

# 06.2 容器与原生通信

JSBridge 设计:

sequenceDiagram
    participant H5 as H5 / RN
    participant Bridge as JSBridge
    participant Native as 原生
    
    H5->>Bridge: window.bridge.call("getDeviceInfo", {}, callback)
    Bridge->>Bridge: 鉴权(白名单 / token)
    Bridge->>Native: 路由到原生方法
    Native->>Native: 执行
    Native->>Bridge: 返回结果
    Bridge->>H5: callback(result)
1
2
3
4
5
6
7
8
9
10
11

安全要点:

  • 白名单:只有可信域名能调用 Bridge
  • 权限分级:摄像头、位置等敏感能力需用户授权
  • 参数校验:防止注入攻击

# 06.3 监管合规问题

金融、医疗等强监管行业的合规要点:

要求 实现
下发内容备案 所有新页面提交监管备案后才能上线
审计日志 谁、什么时候、改了什么内容
应急下架 监管要求 1 小时内能下架某个页面
隐私合规 数据收集明示、最小化原则

# 07.常见陷阱与反例

# 07.1 全员动态化反例

反例:某团队过度追求"全部动态化"——连支付按钮都用 RN 写。结果:

  • RN 启动慢 → 支付页 2 秒白屏
  • RN bug → 支付失败投诉激增
  • 复杂交易逻辑 → RN 实现起来反而麻烦

教训:核心交易必须原生——动态化只用于"边缘内容"。

# 07.2 无降级反例

反例:H5 加载失败 → 白屏 + "请检查网络"——用户直接关 App。

教训:必须有兜底策略:

  • 离线包加载(先用本地版本)
  • 失败重试
  • 降级到原生备份页
  • 兜底文案 / 图片

# 07.3 性能黑洞反例

反例:首页用 RN 做 → 冷启动从 1.2s 涨到 2.8s——日活掉 8%。

教训:动态化的代价是性能 → 必须设性能红线:

  • 首屏 < 1s(关键页面)
  • 启动 < 1.5s
mindmap
  root((三大反例))
    全员动态化
      核心交易也用 RN
      性能差 + bug 多
      核心必须原生
    无降级
      失败白屏
      用户流失
      必须兜底
    性能黑洞
      启动变慢
      日活下跌
      设红线
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 08.演进路线

# 08.1 V1 H5 起步

特征:业务起步、运营内容多。

做法:

  • Hybrid H5 容器
  • 基础 JSBridge
  • 简单离线包

适用阶段:早期 App / 业务探索

# 08.2 V2 跨端 + 容器

特征:业务规模化、多端协同。

做法:

  • H5 + RN/Flutter 共存
  • 配置中心
  • 离线包系统
  • 灰度发布

适用阶段:中型 App

# 08.3 V3 多技术混合

特征:超大规模 / 多业务线。

做法:

  • H5 + RN + Flutter + DSL 多方案并存
  • 统一动态化平台
  • 可视化搭建后台
  • AI 辅助生成

适用阶段:头部 App / 平台化产品

flowchart LR
    V1[V1 H5 起步] --> V2[V2 跨端 + 容器]
    V2 --> V3[V3 多技术混合]
    
    style V1 fill:#e3f2fd
    style V2 fill:#e8f5e8
    style V3 fill:#fff3e0
1
2
3
4
5
6
7

# 09.总结与决策

# 09.1 上线检查表

动态化方案上线前对照:

  • [ ] 边界清晰(核心原生 + 边缘动态)
  • [ ] 性能基线(首屏 < 1s 等)
  • [ ] 容器有 WebView/RN 预热池
  • [ ] 离线包覆盖核心动态化页面
  • [ ] JSBridge 白名单 + 权限分级
  • [ ] 资源签名校验
  • [ ] 灰度发布机制
  • [ ] 一键回滚通道
  • [ ] 兜底策略(失败时降级)
  • [ ] 监控(白屏、加载耗时、错误率)
  • [ ] 监管合规(必要时)
  • [ ] 苹果合规(不下发可执行代码)

# 09.2 选型决策树

flowchart TD
    Start([我要做动态化]) --> Q1{动态化什么?}
    
    Q1 -->|文案/开关/图片| Conf[配置驱动<br/>最轻量]
    Q1 -->|运营/营销页| H5[H5 + 离线包]
    Q1 -->|内容展示页| DSL[DSL 渲染<br/>原生体验]
    Q1 -->|复杂交互页| Q2{已有跨端基础?}
    Q1 -->|核心交易| Native[原生 + 配置<br/>不要动态化]
    
    Q2 -->|RN| RN[RN bundle 下发]
    Q2 -->|Flutter| FT[Flutter 模块]
    Q2 -->|无| H5_2[先用 H5]
    
    style Conf fill:#e3f2fd
    style H5 fill:#e8f5e8
    style DSL fill:#fff3e0
    style Native fill:#ffebee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

最后一句话:动态化解决了"发版周期"和"业务节奏"的矛盾——开篇 800 万 GMV 的损失,就是因为关键入口没用动态化。

好的动态化方案 = 核心稳定、边缘灵活、性能可控、灰度可回滚。

上次更新: 2026/06/07, 10:26:12
IoT框架设计方案
跨端一致性方案

← IoT框架设计方案 跨端一致性方案→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式