gl-vis
性能测试:散点图渲染
gl-vis是Github上面一个专注于用webgl进行可视化的小组。其中有两个repo对大规模点绘制特别擅长。最大规模的绘制数量达到1亿。下面是在Chrome下的首次渲染速度曲线(测试时使用了开发者工具,可能会影响渲染时间):
节点数量 | $10^4$ | $10^5$ | $10^6$ | $10^7$ | $10^8$ |
---|---|---|---|---|---|
渲染时间(ms) | 536.3 | 691 | 1477.3 | 10515.7 | 114096 |
渲染结果 | |||||
备注 | 此时交互出现不流畅现象 |
上述的横轴对节点数量取了$log_{10}$。
上面的结果是三次渲染时间取平均值,测试配置如下:
浏览器:Chrome
机型:MacBook Pro (15-inch, 2017)
处理器:2.9 GHz Intel Core i7
内存:16 GB 2133 MHz LPDDR3
独立显卡:Radeon Pro 560 4096 MB
集成显卡:Intel HD Graphics 630 1536 MB
性能测试:图渲染
该可视化框架未提供对图数据的支持,故而暂未测试。
交互
目前,其似乎利用四叉树(未经验证),能够在鼠标移动时,让光标对齐到离鼠标最近的节点的中心位置:
其他针对鼠标的交互,只支持了缩放。
PIXIJS
pixi.js是一个用webgl进行2维渲染的javascript库。其丰富的文档跟demo,使得开发更为容易上手。
在PIXI的基础上,我利用它的粒子系统,写了散点数据跟图数据的渲染库,自行对其进行了测试。
相关的代码可以见我的github:VisDemo。
性能测试:散点图渲染
节点数量 | $10^4$ | $10^5$ | $10^6$ | $10^7$ | $10^8$ |
---|---|---|---|---|---|
渲染时间(ms) | 504.7 | 1121.7 | 9168.7 | ? | ? |
渲染结果 | ? | ? | |||
备注 | 交互较为不流畅 | 提示可能会out-of-memory crash,死机 | ? |
上述的横轴对节点数量取了$log_{10}$,测试配置同上。
性能测试:图渲染
接下去,我们对密度为20的生成图,利用PIXI的粒子系统进行渲染,布局仅仅是进行了高斯分布。
节点数量 | $10^3+2\times10^4$ | $5 \times 10^3+10^5$ | $10^4+2\times10^5$ | $5 \times 10^4+10^6$ | $10^5+2\times10^6$ |
---|---|---|---|---|---|
渲染时间(ms) | 707.3 | 1566.2 | 2844.3 | 18640 | 38328 |
渲染结果 | |||||
备注 | 此时缩放交互开始出现不流畅现象 | 交互呈现死机状态 | 提示可能会out-of-memory crash |
上述的横轴对节点数量取了$log_{10}$,测试配置同上。
交互
PIXIJS支持对多种事件的监听(节点的hover、click等,故而可以直接支持对节点、边的一些事件的支持)
总结
我们来对比以上的数据结果:
横轴为元素数量(取10对数),纵轴是首屏渲染时间(ms)。