Я работаю с response-konva для рендеринга больших генетических наборов данных, и я довольно новичок как в konva, так и в Reaction-konva.Это было чрезвычайно полезно для итерации кода с его простым в использовании API.Однако я сталкиваюсь с проблемами масштабирования при рендеринге десятков / сотен тысяч компонентов <circle /> or
`.В настоящее время я просто отображаю набор данных и возвращаю круг или прямоугольник, поскольку код очень легко читать / писать.Делает ли konva draw () для каждой фигуры или она уже группирует вызовы draw?Есть ли лучший способ, или мне порекомендовали перейти на использование vanilla canvas или посмотреть опцию gl canvas?
псевдо / сокращенный код, иллюстрирующий то, что я сейчас делаю:
Пример кода показывает, что я пробовал.Я использовал <FastLayer />
, чтобы попытаться сделать его немного более легким.
import React from 'react';
import { Stage, FastLayer, Circle } from 'react-konva';
const RADIUS = 2;
const getLargeDataset = (width, height) => Array.from({ length: 100000 }).map((_, i) => ({
x: Math.random() * width,
y: Math.random() * height
}));
function CirclePlot({ width, height }) {
const largeDataset = getLargeDataset(width, height);
return (
<Stage
height={height}
width={width}
>
<FastLayer>
{largeDataset.map(({ x, y }, i) => (
<Circle
key={`circle:${i}`}
x={x}
y={y}
radius={RADIUS}
/>
))}
</FastLayer>
</Stage>
);
}
Результат загружается медленно, и когда я проверяю память в Chrome Dev-Tools, я вижу, что каждый Круг удерживается отдельно..