0.0.15 • Published 4 years ago
@czwcode/graph-core v0.0.15
运行点作为触发点的时候,怎么保证过去作用域的内容还能执行到
优化运行逻辑
当前已经有了运行状态,并且指定了作用域,当该次任务运行到一个阶段后,触发了另外一个任务 4种触发任务类型
- 运行任务的点
- 完全重复
- 运行任务的上游点
- 将要运行的点与触发点要触发任务重复
- 运行任务的下游点
- 运行点全部重复
- 运行任务的无关点
- 两个图之间没有关系,各自运行
多图获取
- 入参
- 运行的点,以及运行的作用域
- 当前触发的点,以及当前触发的作用域
- 出参
- 获取多图
多图合并,生成最小图
- 清理重复节点
- 构成一个新图
- 获取图的运行路径
用图的方式,来维护任务之间关系
用 DAG(有向无环图) 来描述任务之间的依赖关系,是一个比较常见的调度依赖实现方式。 For example, suppose you have a list of tasks where some tasks have to wait on others before they can begin. You can model this using an acyclic directed graph:
- 环检测
- 状态管理(任务失败 && 任务Pending)
- 获取从起点 到 终点间经历的所有点
- 任务依赖管理
- 所有的任务都应该在依赖的任务完成之后才执行
- 任务流合并
- 运行时的图 是 全局图的子图,临时任务图将会和运行图进行合并,合并完,将以最新的子图,完成所有任务
- 任务触发,通过作用域全选子图,并通过触发点,在子图寻找将要运行的路径上所有的点
- 任务取消(性能优化)
- 当任务流还在进行时,新的任务流触发了,将会取消所有在新的任务流中将被触发的任务,从而避免任务的重复执行
- 任务中断
- 当任务正在执行时,有新的任务节点触发了,将会中断所有在新的任务流中将被触发的任务
- 任务失败 & 任务重试
- 当任务失败后,将会终止所有后续的任务,并提供从当前任务节点的信息,当前错误的任务链,用户可以进行重试
- 多任务链,并行执行
- 多个任务链,当没有任务依赖的时候,将会并发执行
报表中,我最关注什么
作为一个常年奋斗在撸报表一线的开发人员,业务同学最关注的是啥?页面好看?动画酷炫?不,是数据,数据,数据的准确性(重要的事情说三遍)
就我的经验而言,业务同学对数据容忍度为 错误提示 > 空数据 > 错误数据。
总结下来就是,你要么给出正确的数据,要么干脆就别给我,不然我那种错误数据分析了一轮又一轮,还得到一个错误的结论,最后告诉我数据是错的?
作为前端,分析可能让页面数据错误的原因
- 后端数据错误 请清空数据, 并给出错误提醒, 不然我会以为这是我这次查询到的
- 竞态问题
- 连续请求,返回数据的时序问题
- 筛选错误,没有阻断,没有提醒,导致拿着不符合预期的筛选条件去请求
另外一个比较验证的问题就是页面的性能问题了,通常数据报表的数据量都会比较大
- 如何保证最小的渲染次数
- 如何渲染最少的数据量(虚拟滚动)
糟糕的页面表现?
大多数的页面糟糕都是由于 竞态问题导致的
- 比如筛选切换的时候,第一次请求比第二次请求回来的更晚?
- 大多数情况不会出现?简单的场景,当后端做了请求缓存,我第二次请求命中的是缓存,就很可能发生这样的问题
- 当你再一小段时间内进行多次筛选的操作,你的数据请求还可控吗?
- 请求失败之后,用户没有体感?我用了错误的数据分析了半天?
- 请求失败之后,怎样重试?