热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

分享好用简单的阿里开源流程图组件——butterflydag

背景    在阿里云,可能每时每刻都在身边充斥着“数据表”“模型”“调度”等等笼统概念。作为阿里云的前台,如何将这种笼统的概念实体化可视化地给用户或者者其余合作伙伴展现出来显得尤为

背景 

      在阿里云,可能每时每刻都在身边充斥着“数据表”“模型”“调度”等等笼统概念。作为阿里云的前台,如何将这种笼统的概念实体化可视化地给用户或者者其余合作伙伴展现出来显得尤为重要。

      与此同时,在阿里云智能事业部门的孵化速度和迭代速度大大超乎大家的想象,总结起来就是“人少事多繁琐”,经常出现拉1-2个同学两周内就开始孵化一个项目,此时,业界内各种搭建系统能缓解一部分的工作量,可是当遇到了可视化“编排”,“流程图”,“关系图”这种场景,就显得捉襟见肘了。

通过盘点在不同业务支持过的此类场景,总结DAG面临以下痛点:

(1) 产品业务逻辑复杂,且形态差异大

(2) 样式丰富,交互复杂且有较高视觉质量诉求

(3) 定制性要求高,开发速度要求快

处理方案

      小蝴蝶( alibaba/butterfly)脱胎于阿里云数据智能事业部实际的业务场景,在覆盖了我们业务需求的情况下,同时支持了多个兄弟部门笼统出来的前台图组件库,其特性如下:

(1) “零件式开发”,定制性强,入门门槛低:利用了DOM的便利性,提供非常强大的样式定制和复杂的交互定制的能力


(2) 画布常规功能一应俱全:Minmap、网格系统、对齐线、框选、redo/undo、画布缩放和平移、线段动画、自动布局等等。

(3) 更细腻更人性化的交互,后续我们将花更多的精力聚焦更智能的交互:

[3.1] 聚焦部分节点 & 聚焦画布

[3.2] 框选更智能化。控制框选交互:触碰即选中或者者是完全包含才选中;控制可选元素:锚点,节点,线段

[3.3] 拖动边缘处的解决

[3.4] 成组的优化

性能问题

      曾经很多人都质疑我们,小蝴蝶使用DOM,那性能不会很差么?咱们小蝴蝶专注于流程图,为了确保我们业务的完整性和清晰度,我们的定位是:10000个节点为性能的极限,由于超过了10000个节点,整个业务流程会变得混乱不堪。与此同时,我们做了非常多的性能优化的工作:

(1) 分层渲染。各层互不影响,并且确保渲染达到更细的粒度

(2) 首屏逐渐渲染。确保画布的初次展现能接近Canvas的渲染速度

(3) 局部渲染。确保每各元素的每次更改都是最小粒度地渲染,不会触发大面积地重新渲染

(4) 批量操作。把画布内所有元素增删查改都是优化为批量操作,确保尽可能少地操作DOM

合作共建

我们经常被问到小蝴蝶和G6有什么关系?我们和AntV-G6推出的时间差不多,可谓亦师亦友,竞争共建,大家都是为了共同推进这个领域的发展而努力。我们经常和@聚则 交流沟通,为了减少重复建设,我们初步制定了第一阶段的计划,也在努力推进中:

      针对第二阶段的合作共建,我们最近不断在思考,小蝴蝶胜在定制性比较好上手简单但性能上不能支持1w以上的节点,G6渲染引擎是Canvas性能是比较优秀但是定制性有所欠缺入门门槛也会相对高一点。我们能不能把两者优点结合下,取其精华,去其糟粕。我们的构想是:

第一层: 当鼠标浮动上面需要编辑的时候,对应的某个节点会出现在DOM层,把Canvas相应的节点覆盖着

第二层: 当不需要编辑的时候,Canvas作为真正的渲染引擎

第三层: 背景和框选等操作层为不常变化层

      这块我们已经在积极调研中了,期间我们发现在Html to Canvas的时候会损失了一部分CSS的特性,但这部分特性可以由Canvas来补救。希望在这年度能突破这个难关,真正能把DOM和Canvas融合起来,把性能和定制发挥到极致,帮助更多的有需要的同学.

未来的规划

      感谢阿里云设计中心,DataV的兄弟们和其余贡献者 这三年来的添砖加瓦 ,这个年度我们会更加努力加强小蝴蝶底层的能力,丰富小蝴蝶的生态,为打造“零”代码的图编排而努力。

结语

      我们已经积累支持了30+个业务,沉淀了100+个节点样式,不久的将来会开放给小伙伴使用,到时候大家可以像“iconfont”式都组合拼凑,能大大降低了大家的开发时间。

     三年磨一剑,希望小蝴蝶能为你提供一份助力。小蝴蝶坚持开源了三年,您的star是我们的动力: alibaba/butterfly ,谢谢大家!也同时欢迎有兴趣的兄弟们一起来添砖加瓦。


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
author-avatar
微微aviviya
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有