【发布时间】:2015-02-27 12:14:19
【问题描述】:
我正在尝试找到在页面上绘制数千条线的最有效方法。
我有一个数据库,其中包含我想绘制的每一个点,我可以将它们拉入一个 python 坐标列表中,如下所示:[[0,0],[200,100],[400,250]]。该列表包括大约 2000 个点。我想将这些点中的每一个与形成一条大线的线段连接在一起。每个部分可能需要不同的颜色
在每一页上,我想画 2-3 条这样的大线(所以每页大约有 2000-6000 个点)
我的两个问题是:
在不降低浏览器速度的情况下绘制这么多线条的最有效方法是什么?
有没有办法使生成的图像/画布可缩放,以便用户可以放大这条线的特定部分并四处导航?
我目前正在使用一些类似这样的测试代码,但是有没有更有效的方法来做到这一点:
<canvas id="myCanvas" width="400" height="400"
style="border:1px solid #ffffff;"></canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.strokeStyle = '#ff0000';
ctx.stroke();
ctx.closePath();
ctx.beginPath();
ctx.moveTo(200,100);
ctx.lineTo(400,250);
ctx.strokeStyle = '#6b44cc';
ctx.stroke();
ctx.closePath();
</script>
【问题讨论】:
-
为什么不对子集进行性能测试:jsperf.com/html-vs-svg-vs-canvas/5
-
为了提高效率,我很可能不会尝试其中一个插件(例如 D3),而是依赖 Canvas,就像你在这里一样,或者 SVG。而且,如果上面的性能测试是任何指标,那么您就在正确的道路上。
-
我做了一个小测试,用 200k 不同颜色的线条和画布绘制然后非常快,所以速度应该不是问题,但是每页 2000 行你只会看到随机性(不要认为缩放很重要,稍后会测试)jsfiddle.net/dqkksbz6/2
标签: javascript html css canvas drawing