echarts 性能优化_Unicorn 如何快速定位性能问题

前言

首先我会介绍一下我们公司内部的数据可视化平台 —— Unicorn,让大家了解下unicorn目前有哪些功能。

本次的主要议题 —— 如何快速定位性能问题,在这部分我将向大家着重介绍一些我们产品迭代中的一些问题和优化手段。

产品介绍

业务背景

首先先来说一下为什么我们要做这样一个数据可视化平台,主要有以下几个方面:

产品是否免费Ops账号登录、细分权限易上手公司计算引擎集成
Tableau
网易有数
Excel
Unicorn

由于有上面这些业务场景,我们便开始搭建属于喜马拉雅的一个数据可视化平台。

3239326954a3ce795bef792c816a847e.png

产品功能效果图

简单展示一下unicorn的实际效果图

首先是数据模型界面,进入“数据模型”模块,可以创建数据模型,包括静态数据模型&动态数据模型&CSV数据模型,其中动态数据模型支持占位符的配置:

0f508e6fbf01c3742a275671538a299b.png

配置好数据模型的sql语句配置信息,点击执行按钮成功后,就可以到仪表盘的编辑界面使用做好的数据模型制作仪表盘。

049e57d6c901c23313d07a890c29e06f.png

用户可以根据需求,添加自己所需要的图表、筛选器、指标卡、文本、监控等,
用户再图表编辑面板上选择数据模型,调整图表样式配置。

79e34d6e4468a75092ff3ff237f95834.png

如何快速定位性能问题

unicorn迭代中遇到的问题

用户长时间使用unicorn,会感觉交互会慢慢变卡,图表过多切换过快甚至会崩溃。

调试定位问题

1、在unicorn下面里面制做两个相同的仪表盘,制定一个Benchmark,共14个echart面积图,每个图表378个数据点,且显示所有数据点。

2、为了避免装给浏览器装的一些插件造成影响,使用Chrome的隐身模式页面,它会把所有的插件都给禁掉。

3、打开本地启动的Unicorn项目对应的Benchmark的仪表盘-验证图表性能,打开Chorme控制台右上角的更多里面的More tools的Performance monitor,这个面板可以看到CPU usage,JS heap size等实时指标。

4、从验证图表性能仪表盘,点击跳转到验证图表性能1仪表盘,观察CPU usage,JS heap size等指标变化情况。

第一次加载完后10s:

60a53c31ecb28d63b5b7cae02362394b.png

第三次加载完后10s:

d8f54e7897cc735c8af69bf63467cf1c.png

性能问题原因猜想

根据上一步JS heap size持续上涨,没有回收的趋势,判断项目里面存在JS内存泄漏, unicorn项目中占用内存较多的如:echarts、ace等。

定位问题

1、用Memory的Heap snapshot来定位问题

heap snapshot(堆快照),给当前内存堆拍一张照片。因为动态申请的内存都是在堆里面的,而局部变量是在内存栈里面,是由操作系统分配管理的是不会内存泄露了。所以关心堆的情况就好了。

操作流程

  • unicorn下面里面制做两个相同的仪表盘(两个柱状图1,两个柱状图2)。

  • 打开两个柱状图1仪表盘,然后点击拍照按钮。

5a0521ec6d8af3ce8e8f54a67326cc67.png

它就会把当前页面的内存堆扫描一遍显示出来,如下图所示:

  • 打开两个柱状图2仪表盘,点击垃圾回收的按钮,避免其他干扰问题,然后点击拍照按钮。

  • c7df1546063a44bf9381f9d4711fa278.png

它就会把当前页面的内存堆扫描一遍显示出来,如下图所示:

4dfa24253fd71adda8b167a43a1af079.png

2、用Class Filter定位明细

1、 在Class Filter的搜索框里搜一下echart:

第一次快照

6d02561bf82474a85740f4d820b0d396.png

第二次快照

7cc624050788a30af3511280bcadf0f9.png

2、Class Filter搜索框里搜一下detached:

2bcd4791f53ce28d38d1c9bda3ea6a90.png

它会显示所有已经分离的DOM结点,我们把鼠标放上去等个2s,它就会显示这个div的DOM信息:

fa37adf40abef6bd9eb2ce8b47cee08c.png

通过className等信息可以知道它是检查页面中的DOM节点,点击一个DOM节点,在下面的Object的窗口查看详细信息:

fa20f7450753f9cf901d25e04eca1f68.png

问题总结

1、echart实例在路由切换,前面一个组件已经销毁后,并没有释放掉。

2、detached的dom没有被回收的问题。

3、部分event listener没有被及时回收。

优化前后Benchmark对比

优化阶段JS heap sizeDOM NodesJS event listeners
优化前281MB-548MB-806MB6306-3815-53744181-2624-3563
优化后60.5MB-60.9MB-66.6MB2315-2297-23331728-1739-1806
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值