javascript - d3 中的渲染性能

标签 javascript performance google-chrome svg d3.js

我正在使用 d3 创建数据可视化程序,在尝试设置大量元素的不透明度时遇到了性能问题。

当用户更改某些数据时,我有一个被调用的事件,当该事件被触发时,我计算每个边、节点和文本节点的不透明度并相应地更改它们。

例如 -

function onEvent() {
  edges.style("opacity", computeOpacity);
  edges.style("stroke", computeStroke);

  nodes.style("opacity", computeOpacity);
  textNodes.style("opacity", computeOpacity);

}

当我有很多元素时(边/节点/文本节点计数大于 700),用户体验非常缓慢。

我检查了 chrome 时间线 - 发现有一个重新计算样式,之后是一个绘制(绘制所有“svg”元素)和 2/3 复合图层。

我可以做什么来提高代码的性能? 每个边缘/节点/文本节点的不透明度和描边计算非常重要,并且是非常便宜的操作 - 检查一些属性并进行简单的 Math.max 计算。

最佳答案

问题不在于实际计算,而在于 SVG 的渲染。因此,在 D3 中您实际上无能为力来改进它。不过,您可以尝试以下一些方法。

  • 如果您可以过滤显示的元素数量,请执行此操作。
  • 如果特定元素的不透明度变化非常小,请勿更改它,因为它将不可见。
  • 如果可能,请用更简单的元素替换元素,特别是用 line 替换直的 path
  • 使用 Canvas 而不是 SVG。

什么是可能的以及什么是有效的将取决于您的特定应用程序。

关于javascript - d3 中的渲染性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316083/

相关文章:

javascript - 使用javascript将base64编码的字符串写入图像

javascript - 将选定的 li 添加到现有的 ul

java - 重置计数器或让它增加并使用模数是否更有效

json - manifest.json 上的多个匹配项

javascript - 使用 Fabric.js 桥接文本效果

javascript - 我可以用 node express 加载 css 文件,但它不起作用,一些 css 文件可以工作

mysql - 如何记录特定数据库的mysql慢查询

sql-server - Azure SQL Server : Insert 20m records between tables is slow (60+ mins)

css - -webkit-text-fill-color 不适用于 Chrome 69.0.3

c# - 从 chrome 网络浏览器获取 url