gpt4 book ai didi

javascript - 哪个更轻 : polygon or path?

转载 作者:行者123 更新时间:2023-12-03 00:55:31 25 4
gpt4 key购买 nike

我正在渲染由 600 多个在笛卡尔平面上对齐的 SVG 元素组成的 map 。我需要它们是单独的元素,因为我希望它们单独响应鼠标事件等。

我的问题是:为了应用大量转换,例如“翻译”(更改其位置),哪个选项对浏览器来说“更轻”?

渲染像这个六边形这样的多边形:

<polygon points="43.301270189221924,55 43.301270189221924,65 51.96152422706631,70 60.6217782649107,65 60.6217782649107,55 51.96152422706631,50"></polygon>

...或将它们创建为如下路径:

<path d="M43.301270189221924,55L43.301270189221924,65L51.96152422706631,70L60.6217782649107,65L60.6217782649107,55L51.96152422706631,50Z"></path>

最佳答案

我怀疑会有很大差异,但如果有的话,我希望 polygon 会稍微快一些,因为它是专门用于多边形的。

事实上,在运行两个分析脚本(见下文)后,我的上述评估似乎是正确的。在所有浏览器中,多边形都比路径快一点,但差异并不显着。所以我怀疑你真的需要担心这个。幸运的是,无论如何,polygon 听起来都是合乎逻辑的选择。

分析路径:

<svg xmlns="http://www.w3.org/2000/svg">
<g id="paths"></g>

<text x="20" y="20" id="out"></text>

<script><![CDATA[
var d = "M43.301270189221924,55 L43.301270189221924,65 L51.96152422706631,70 L60.6217782649107,65 L60.6217782649107,55 L51.96152422706631,50 Z";

var paths = document.getElementById('paths');
var path = document.createElementNS("http://www.w3.org/2000/svg", 'path');
path.setAttribute('d', d);

var start = new Date();
for (var i = 0; i < 20000; i++)
{
var el = path.cloneNode(true);
el.setAttribute('transform', 'translate(' + ((i * 20) % 1000) + ',' + ((i / 50) * 20) + ')');
paths.appendChild(el);
}

setTimeout(function() {
document.getElementById('out').textContent += 'Path: ' + (new Date() - start) + 'ms';
// paths.parentNode.removeChild(paths);
}, 10);

]]>
</script>
</svg>

对于多边形也是如此:

<svg xmlns="http://www.w3.org/2000/svg">
<g id="polygons"></g>

<text x="20" y="20" id="out"></text>

<script><![CDATA[
var points = "43.301270189221924,55 43.301270189221924,65 51.96152422706631,70 60.6217782649107,65 60.6217782649107,55 51.96152422706631,50";

var polygons = document.getElementById('polygons');
var polygon = document.createElementNS("http://www.w3.org/2000/svg", 'polygon');
polygon.setAttribute('points', points);

var start = new Date();
for (var i = 0; i < 20000; i++)
{
var el = polygon.cloneNode(true);
el.setAttribute('transform', 'translate(' + ((i * 20) % 1000) + ',' + ((i / 50) * 20) + ')');
polygons.appendChild(el);
}

setTimeout(function(){
document.getElementById('out').textContent += 'Polygons: ' + (new Date() - start) + 'ms';
// polygons.parentNode.removeChild(polygons);
}, 10);

]]>
</script>
</svg>

关于javascript - 哪个更轻 : polygon or path?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com