我是d3js的新人。我渲染了图形~10000个节点。
我使用了web worker和static force render(因为正常渲染的成本是web worker的两倍以上)。
// js
var nodes = d3.range(10000).map(function(i) {
return {
index: i
};
});
当范围是10000时,它将花费将近20秒,你可以在控制台上看到它,那么如何减少这个次数呢?
答案 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.