使用SVG.js绘制图表,由于绘制元素过多导致UI阻塞有什么解决方法吗?

需求比较特别,是个比较复杂的网络拓扑图,要画得比较整齐。找了很久都没有找到现成的库。所以就用SVG.js自己撸了一个,但是在数据变多的时候画图时间就变得很长,现在的数据已经接近10s,数据还有继续增长的可能。

当初也是一时脑抽选了SVG,可能选Canvas会比较好,而且也并没有特别需要SVG的事件处理能力之类的需求,但是现在时间有限,想看看有没什么办法可以临时处理一下。

想在后台渲染好之后把svg的xml传到前台显示,发现node.js上由于缺乏DOM相关的API,使用SVG.js作者推荐的svgdom来做DOM API的polyfill,发现各种图形的定位已经乱掉了。JSDOM也好像缺乏对SVG的支持。至于PhantomJS或者headless Chrome这种有点复杂,需要点时间学习。

试过把不涉及DOM的抽出来放到WebWorker上运行,绘图还是需要1~2s。这个图还是要放在首页的,总不能让用户一进来先卡个几秒钟吧。

有没有大神造过类似的轮子能提供点优化的思路,先谢了~~

阅读 4.4k
3 个回答

图表需求为啥不用图表库?就算不用也可以参考源码呀。

不知道你怎么实现的,不过我估计最大的问题是每次画一个新元件就要渲染一次,以至于渲染引擎被卡住。

我建议你把画好的 SVG 文件存下来,然后直接丢到浏览器里看渲染时间。如果很快就渲染出来,那就是“画”的过程太浪费时间,优化也从此入手。如果也要1~2s才能渲染出来,那可能就要优化你画出来的结果,看有没有不必要的元件可以干掉一些,等等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题