首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用react-konva渲染数十万个圆

使用react-konva渲染数十万个圆
EN

Stack Overflow用户
提问于 2019-09-26 01:59:58
回答 1查看 157关注 0票数 1

我正在使用react-konva渲染大型基因数据集,我对konva和react-konva都是相当陌生的。它具有易于使用的api,对代码迭代非常有帮助。然而,我遇到了渲染数万或数十万`或组件的伸缩问题。目前,我只是在数据集上映射,并返回一个圆形或矩形,因为代码非常容易读/写。konva是否对每个形状都执行了一次draw(),或者它已经对draw调用进行了批处理?有没有更好的方法,或者建议我改用香草画布,或者考虑一下gl canvas选项?

伪代码/缩写代码说明了我目前正在做的事情:

代码示例显示了我尝试过的内容。我使用了<FastLayer />,试图让它变得更轻一点。

代码语言:javascript
复制
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都是单独持有的。

EN

回答 1

Stack Overflow用户

发布于 2019-12-27 21:35:28

如果你只想在页面上显示圆圈,那么reactkonvareact-konva就是巨大的开销。对于数以千计的形状,它将消耗大量内存。

最好直接使用canvas API (2d或webgl)。

或者可以考虑一些简化绘图的方法。例如,如果圆在屏幕上不可见,则不要渲染圆。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58104140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档