【发布时间】:2014-05-02 14:06:53
【问题描述】:
当我在我的 d3 应用程序的刻度功能中使用旋转时,整个应用程序会变慢。
例如:如果取消注释行 //var angle = 0;在下面的jsfiddle 中,它的运行速度提高了 20 倍。
这是为什么?轮换只是非常昂贵还是我做错了什么?
function tick() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
linktext.attr("transform", function(d) {
var xDiff = d.source.x - d.target.x;
var yDiff = d.source.y - d.target.y;
var angle = Math.atan2(yDiff, xDiff) * (180.0 / Math.PI);
//var angle = 0;
return "translate(" + (d.source.x + d.target.x) / 2 + ","
+ (d.source.y + d.target.y) / 2 + ")rotate(" + angle + ")";
});
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
}
注意:我修改了找到here的原始jsfiddle
【问题讨论】:
-
这里(Chrome)并没有那么糟糕,但是有一个明显的区别。不过,您实际上无能为力——文本的旋转非常昂贵,因为它不是一个简单的形状。
-
但这似乎与单个文本旋转的处理更相关,因为如果您将角度设置为非零,它仍然非常快。
标签: javascript d3.js rotation force-layout