refactor: optimize label rendering by building HTML string for batch updates

This commit is contained in:
StempunkDev 2026-02-21 20:37:58 +01:00
parent 6fa3f786dc
commit e1740567c6

View file

@ -35,22 +35,23 @@ const burgLabelsRenderer = (): void => {
const dx = dxAttr ? parseFloat(dxAttr) : 0; const dx = dxAttr ? parseFloat(dxAttr) : 0;
const dy = dyAttr ? parseFloat(dyAttr) : 0; const dy = dyAttr ? parseFloat(dyAttr) : 0;
// Build HTML string for all labels in this group
const labelsHTML: string[] = [];
for (const labelData of labels) { for (const labelData of labels) {
// Update label data with SVG group offsets // Update label data with SVG group offsets
if (labelData.dx !== dx || labelData.dy !== dy) { if (labelData.dx !== dx || labelData.dy !== dy) {
Labels.updateLabel(labelData.i, { dx, dy }); Labels.updateLabel(labelData.i, { dx, dy });
} }
labelGroup labelsHTML.push(
.append("text") `<text text-rendering="optimizeSpeed" id="burgLabel${labelData.burgId}" data-id="${labelData.burgId}" x="${labelData.x}" y="${labelData.y}" dx="${dx}em" dy="${dy}em">${labelData.text}</text>`
.attr("text-rendering", "optimizeSpeed") );
.attr("id", `burgLabel${labelData.burgId}`) }
.attr("data-id", labelData.burgId)
.attr("x", labelData.x) // Set all labels at once
.attr("y", labelData.y) const groupNode = labelGroup.node();
.attr("dx", `${dx}em`) if (groupNode) {
.attr("dy", `${dy}em`) groupNode.innerHTML = labelsHTML.join("");
.text(labelData.text);
} }
} }