目录

DivKit:Yandex 开源的 Server-Driven UI 框架

DivKit 是 Yandex 开源的 Server-Driven UI(SDUI)框架,GitHub 8600+ Star。它允许服务端下发 UI 布局,客户端渲染,一套 JSON 同时覆盖 Android、iOS、Web 三端。

与 Nop 平台的思路一致——UI 由结构化数据驱动,而非手写代码。区别在于 Nop 的 JSON 由后端 Excel 模型自动生成,DivKit 的 JSON 由服务端直接下发。

项目结构

divkit/
  client/              ← 客户端渲染引擎
    android/           ← Android(Kotlin)
    ios/               ← iOS(Swift)
    web/divkit         ← Web(TypeScript)
  json-builder/        ← 服务端 JSON 生成库
    typescript/
    kotlin/
    python/
  schema/              ← JSON Schema 定义
  api-generator/       ← 从 Schema 生成多端 API
  test-data/           ← 示例和测试数据

工作方式

DivKit 的 JSON 描述页面结构。服务端返回 JSON,客户端直接渲染:

{
  "card": {
    "log_id": "hello_card",
    "states": [
      {
        "state_id": 0,
        "div": {
          "type": "container",
          "orientation": "vertical",
          "items": [
            {
              "type": "text",
              "text": "Hello, DivKit!",
              "font_size": 24,
              "font_weight": "bold",
              "alignment_h": "center"
            },
            {
              "type": "button",
              "text": "Click Me",
              "actions": [
                {
                  "type": "url",
                  "url": "https://divkit.tech"
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

客户端 SDK 解析这个 JSON,映射到原生组件渲染。不需要 WebView,性能接近原生。

三端覆盖

平台 语言 集成方式
Android Kotlin 作为 View 嵌入现有应用
iOS Swift 作为 UIView 嵌入
Web TypeScript/React 独立组件

DivKit 的核心理念是“嵌入式”——它不是一个独立的应用框架,而是一个可以嵌入到现有 App 任意页面的 UI 组件。这意味着可以渐进式采用,不需要重写整个应用。

组件系统

DivKit 内置丰富的 UI 组件:

每个组件支持完整的状态管理:visibility、alpha、transition、transform。

表达式系统

DivKit 的 JSON 支持表达式,用于动态数据绑定:

{
  "type": "text",
  "text": "@{getString('greeting')}, @{userName}!"
}

表达式在客户端求值,支持:

与 Nop 前端的对比

对比维度 DivKit Nop 前端
驱动方式 服务端下发 JSON 后端模型生成 JSON
跨平台 Android + iOS + Web 当前以 Web 为主
集成方式 嵌入原生 View AMIS/Flux 框架渲染
JSON 生成 手动或服务端代码生成 由 Delta 管线自动生成
表达式 @{} 语法 AMIS ${} / Flux expression
开源协议 Apache 2.0 MIT

共同点:都认为 UI 应该由结构化数据描述,而不是手写平台特定的代码。

适用场景

快速体验

在线 Playground:divkit.tech/playground

# Web 端本地运行
cd client/web/divkit
npm install
npm start

总结

DivKit 和 Nop 平台代表了同一趋势的两条路径:DivKit 从客户端渲染出发,解决多端一致性问题;Nop 从后端模型出发,解决全栈自动化问题。两者都认为结构化的 UI 描述是下一代前端开发的基础。

进一步阅读