菜单

核心系统

相关源文件

Apache ECharts 的核心系统是所有图表功能的基础。本文档概述了 ECharts 功能背后的核心系统、它们的交互方式以及关键组件。有关图表类型的具体信息,请参阅 图表类型,有关组件的详细信息,请参阅 组件,有关数据管理,请参阅 数据管理

概述

ECharts 的核心系统由多个相互关联的模块组成,负责初始化、渲染、事件处理、选项管理以及各种可视化组件之间的协调。这些系统协同工作,将数据和配置选项转化为交互式可视化。

来源:src/core/echarts.ts332-496 src/echarts.ts20-46 package.json1-225

ECharts 初始化和实例创建

创建图表的入口点是 echarts.init() 函数,该函数创建并返回一个 ECharts 实例。此实例充当图表的中心控制器。

定义在 src/core/echarts.ts 中的 ECharts 类包含所有必需子系统的引用

  • _zr:用于实际绘制的 ZRender 实例
  • _model:用于选项管理 的 GlobalModel
  • _coordSysMgr:坐标系管理器
  • _scheduler:任务调度器
  • _api:用于插件的扩展 API
  • _messageCenter:事件处理中心

来源:src/core/echarts.ts395-496 src/echarts.ts20-46

选项管理

ECharts 中配置图表的首选方法是 setOption() 方法。它处理各种选项处理任务,包括

  1. 选项归一化
  2. 主题应用
  3. 与现有选项合并
  4. 模型创建和更新

定义在 src/util/types.ts 中的 ECUnitOption 类型是所有图表选项的基础,诸如 SeriesOptionGridOption 等组件都从中扩展。

来源:src/core/echarts.ts603-678 src/util/types.ts522-537

数据流和处理

数据通过 ECharts 在一系列处理阶段中流动,由 Scheduler 类管理。每个阶段都有一个确定其执行顺序的优先级级别。

调度器按递增的优先级数字处理管道中的数据。在 src/core/echarts.ts 中定义的优先级常量决定了处理顺序

PRIORITY_PROCESSOR_FILTER = 1000
PRIORITY_PROCESSOR_SERIES_FILTER = 800
PRIORITY_PROCESSOR_DATASTACK = 900
PRIORITY_PROCESSOR_STATISTIC = 5000

用于视觉编码

PRIORITY_VISUAL_LAYOUT = 1000
PRIORITY_VISUAL_GLOBAL = 2000
PRIORITY_VISUAL_CHART = 3000
PRIORITY_VISUAL_COMPONENT = 4000

来源:src/core/echarts.ts147-192 src/core/Scheduler.js

渲染系统

ECharts 使用 ZRender 作为其渲染引擎。ZRender 抽象了 Canvas 和 SVG 之间的差异,提供统一的绘图 API。

渲染系统遵循以下步骤

  1. 图表和组件视图创建图形元素
  2. 将元素添加到 ZRender 的组层次结构中
  3. ZRender 的 painter 将这些元素渲染到 Canvas 或 SVG

渲染过程通过脏矩形检测和大数据集增量渲染等技术进行优化。

来源:src/core/echarts.ts296-304 src/util/graphic.ts42-123

事件系统

ECharts 的事件系统构建于 ZRender 的 Eventful 类之上。它处理用户交互、状态更改和自定义事件。

事件系统支持

  • 鼠标/触摸交互
  • 高亮和选择
  • 通过 on()dispatchAction() 进行自定义事件
  • 生命周期事件,例如 renderedfinished

来源:src/core/echarts.ts291-292 src/util/states.ts80-94 src/util/ECEventProcessor.ts

扩展 API

扩展 API(ExtensionAPI)提供了组件和插件与核心系统交互的接口。它在初始化期间创建,并传递给组件和图表实现。

ExtensionAPI 提供了以下方法

  • 访问图表尺寸和设备信息
  • 派发操作
  • 坐标转换
  • 导出图表图像
  • 管理图表之间的连接

来源:src/core/ExtensionAPI.js src/core/echarts.ts469

坐标系

坐标系统管理器(CoordinateSystemManager)负责创建和管理笛卡尔坐标、极坐标、日历坐标等坐标系统。

每个坐标系统提供

  • 数据到视觉的映射(数据坐标到像素坐标)
  • 坐标轴管理
  • 用于裁剪的区域计算
  • 对特定图表类型的支持

来源:src/core/CoordinateSystem.js src/core/echarts.ts467

调度器和任务管道

调度器是数据处理和视觉编码任务的编排者。它将任务组织到管道中并按优先级顺序执行它们。

调度器提供

  • 优先任务执行
  • 大数据集的渐进式渲染
  • 逐帧执行控制
  • 任务依赖管理

来源:src/core/Scheduler.js src/core/echarts.ts478

分发文件和打包

ECharts 为不同的用例提供了几个分发文件

文件目的详情
dist/echarts.js完整版所有图表类型和组件
dist/echarts.common.js通用版常用图表和组件
dist/echarts.simple.js精简版仅包含基本图表类型
dist/echarts.esm.jsESM 版适用于 ES 模块环境
dist/echarts.min.js精简压缩版面向生产环境,功能齐全

分发文件使用构建系统从源代码构建。主要使用入口点是:

  • Web 脚本标签dist/echarts.min.js
  • ES 模块import * as echarts from 'echarts'
  • CommonJSconst echarts = require('echarts')

来源: package.json17-224

核心依赖项

ECharts 的依赖极少,其中 ZRender 是最关键的依赖

  • ZRender:一个轻量级的 2D 绘图库,抽象了 Canvas/SVG 的差异
  • tslib:TypeScript 的运行时辅助库

来源: package.json66-68

总结

Apache ECharts 的核心系统为所有图表类型和功能提供了基础。它们负责初始化、配置项处理、渲染、事件处理和坐标系管理。这些系统被设计成可扩展的,允许添加新的图表类型、组件和功能,同时保持一致性和性能。

理解这些核心系统对于 ECharts 的高级使用、定制和扩展至关重要。有关图表类型和组件的更具体信息,请参阅各自的 wiki 页面。