Javascript 初始渲染后非常长的React脚本冻结程序

Javascript 初始渲染后非常长的React脚本冻结程序,javascript,html,reactjs,Javascript,Html,Reactjs,我正在使用ReactJS制作康威《生活游戏》的翻拍版。到目前为止,我只渲染了一个静态游戏场,共有19200个小div,其中160个cols乘120行 电路板的渲染速度似乎还可以,但由于某种原因,程序挂起了整整一分钟。当我看chromedev工具(我还是新手)时,它似乎显示了一些渲染,如果编写一个完整堆的脚本,则需要整整一分钟,然后是另一个快速渲染。脚本键上给定的颜色与侦听器的颜色相同 我不确定是什么挂断了它,因为在这一点上,我的react应用程序中的一切都是静态的,相对简单 对于这种设置,192

我正在使用ReactJS制作康威《生活游戏》的翻拍版。到目前为止,我只渲染了一个静态游戏场,共有19200个小div,其中160个cols乘120行

电路板的渲染速度似乎还可以,但由于某种原因,程序挂起了整整一分钟。当我看chromedev工具(我还是新手)时,它似乎显示了一些渲染,如果编写一个完整堆的脚本,则需要整整一分钟,然后是另一个快速渲染。脚本键上给定的颜色与侦听器的颜色相同

我不确定是什么挂断了它,因为在这一点上,我的react应用程序中的一切都是静态的,相对简单

对于这种设置,19200个小div是否太多?似乎不太可能。或者,在分配大量事件侦听器时,这件事不知何故冻结了吗?我该如何解决这个问题

请帮忙。我真的需要了解背景中发生了什么。 对任何人的额外爱的答案帮助我下一次自己解决类似的问题

/**
*@desc React类场渲染游戏场
*@param{Array}state.fieldE-偶数迭代游戏板数组
*@param{Array}state.fieldO-奇数迭代游戏板数组
*@param{Sting}props.config-默认未定义。名称设置初始字段配置
*@param{Boolean}props.continue-字段继续迭代,而continue true
*@param{Number}props.speed-设置迭代之间的时间
*@param{Number}props.zoom-设置父容器中的板缩放
*@param{LifeGame~Callback}props.onReset-重置字段并切换父重置状态
*@param{LifeGame~Callback}props.incGen-重置字段并切换父重置状态
*@returns{HTML}可玩游戏场
*/
类字段扩展了React.Component{
建造师(道具){
超级(道具)
this.onReset=this.onReset.bind(this);
此.state=({
菲尔德:未定义,
菲尔多:未定义,
});
}
///将处于状态的fieldE和fieldO设置为零填充数组
onReset(){
常量字段=[];
fieldE.length=19200;
设i=0;
而(i<19200)fieldE[i]=0,i++;
常数fieldO=[…fieldE];
这是我的国家({
菲尔德,
菲尔多
});
}
组件willmount(){
这个.onReset();
}
render(){
log('props:',this.props);
console.log('state:',this.state);
//将适当的字段数组转换为HTML以进行输出
const evenGen=(this.props.generation%2==0);
const fArr=evenGen?[…this.state.fieldE]:[…this.state.fieldO];
设len=fArr.长度;
设cols=Math.sqrt(4/3*len);
let field=fArr.map((el,i)=>{
如果(i+1%cols==0){
返回}
返回;
});
让外场=[],
i=0,
j=0;outField.length=cols;
//使用“外场”将场分隔为由div封装的行
而(j{
字段切片(j,j+cols)
}
; j+=cols; i++; } 报税表(< div类='游戏场'>{ 外场 } < /div> ); } } //调用要渲染的字段 类LifeGame扩展了React.Component{ 建造师(道具){ 超级(道具); 此.state={ 配置:未定义, isContinue:false, 速度:1, 缩放:0, 世代:0,, } } render(){ 报税表(< 字段配置={ 此文件为.state.config } isContinue={ 这个。状态。继续 } 生成={ 这一代 } 速度={ 这是国家速度 } 缩放={ 这个是.state.zoom } /> ); } } ReactDOM.render(< LifeGame/>, document.getElementById('root')) );
html,
身体,
分区,
跨度
ul,
ol,,
h1,
h2,
h3,
h4{
保证金:0;
填充:0;
}
.运动场{
显示器:flex;
弹性收缩:1;
行换行:nowrap;
}
c{
显示:内联块;
弹性收缩:0;
高度:4px;
宽度:4px;
左边框:1px实心rgba(192,192,192,0.4);
边框底部:1px实心rgba(192,192,192,0.4);
背景:黑色;
保证金:0;
填充:0;
}
r{
显示器:flex;
弯曲方向:行;
弹性收缩:1;
flex-grow:0;
行换行:nowrap;
位置:相对位置;
文本对齐:居中;
背景:rgba(255、255、150、0.6);
}


我刚刚注意到几年前的这个问题一直没有得到回答。我对这个原始问题的解决方案——大多数人第一次遇到一个试图添加太多html元素的项目时的解决方案——是使用a。

对于这个设置来说,19200个小div太多了。
-是的,我现在正在看一个板,它的加载速度是可点击div的10倍。这里缺少了一些东西。当我看时间线时,我看到半秒钟的光栅化绘画。这是否可能与flexbox的div数有关?我收回,它与flexbox无关,它与浏览器在屏幕上绘制项目有关。React渲染速度很快,但浏览器绘制这么多项目需要花费很长时间。我回到我最初的评论——你的div太多了。找到更好的方式来显示数据。另外,我想看到一个链接,它有192000个可点击的div,所有这些div都在同一时间呈现,加载速度比你的快。这是在画布上呈现的,甚至不可比较。也许你应该考虑做同样的事情。