使d3强制静态布局更快

时间:2018-01-21 03:46:21

标签: javascript d3.js web-worker

我是d3js的新人。我渲染了图形~10000个节点。

我使用了web worker和static force render(因为正常渲染的成本是web worker的两倍以上)。

// js
var nodes = d3.range(10000).map(function(i) {
  return {
    index: i
  };
});

当范围是10000时,它将花费将近20秒,你可以在控制台上看到它,那么如何减少这个次数呢?

jsfiddle

whole code at github

1 个答案:

答案 0 :(得分:2)

您希望修改alpha衰减率,它可以控制力模拟冷却的速率:

  

alpha衰减率决定当前alpha的速度   插入所需的目标alpha;自默认   目标alpha为零,默认情况下,它控制的速度有多快   模拟冷却。 较高的衰减率会使模拟稳定下来   更快,但有可能陷入局部最低限度;较低的价值   导致模拟运行时间更长,但通常会收敛   更好的布局。让模拟永远在当前运行   alpha,将衰减率设为零;或者,设置目标alpha   大于最小alpha [减少冷却时间]。 (api docs)。

alpha衰减的默认设置为~0.0228,如果你想减少力冷却所需的时间,你可以提高alpha衰减率,使其冷却得更快:

  var simulation = d3.forceSimulation(nodes)
      .force("charge", d3.forceManyBody())
      .force("link", d3.forceLink(links).distance(20).strength(1))
      .force("x", d3.forceX())
      .force("y", d3.forceY())
      .alphaDecay(0.5)

成本可能是不太理想的布局,但这会加快最终结果。这是Updated fiddle.