我正在使用 react-konva 渲染大型遗传数据集,而且我对 konva 和 react-konva 都很陌生。它易于使用的 api 对代码迭代非常有帮助。但是,我遇到了渲染数万/数十万个<circle /> or
组件的缩放问题。目前,我只是映射数据集并返回一个圆圈或矩形,因为代码很容易读/写。konva 是在每个形状上执行 draw() 还是已经批处理了绘制调用?有没有更好的方法,还是建议我改用香草画布或查看 gl 画布选项?
伪/缩写代码说明了我目前在下面做的事情:
代码示例显示了我尝试过的内容。我曾经<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 中的内存时,我看到每个 Circle 都是单独保存的。