简体   繁体   English

性能缓慢,在反应中使用 p5

[英]Slow performance, using p5 in react

I am trying to use p5 ( https://p5js.org/ ) in a react application and the performance of some sketches is really bad (same in development as after building the app).我正在尝试在p5应用程序中使用p5 ( https://p5js.org/ ) 并且某些草图的性能非常糟糕(在开发中与构建应用程序后相同)。 I'm using create-react-app for the project scaffold, without any changes to the build setup.我正在为项目脚手架使用create-react-app ,对构建设置没有任何更改。

The sketches run around 50-60fps when running them directly in the browser, but when loaded into react they drops to about 1-2fps.直接在浏览器中运行草图时,它们的运行速度约为 50-60fps,但当加载到 react 中时,它们会下降到大约 1-2fps。

I am connecting the sketches with react like this:我将草图与这样的反应连接起来:

 // React Component to interface the sketches class P5Wrapper extends React.Component { componentDidMount() { const { sketch, ...rest } = this.props; this.canvas = new p5(sketch(rest), this.wrapper); } componentWillReceiveProps(newProps) { const { sketch, ...rest } = newProps; if (this.props.sketch !== newProps.sketch) { this.canvas.remove(); this.canvas = new p5(newProps.sketch(rest), this.wrapper); } if (typeof this.canvas.onNewProps === "function") { this.canvas.onNewProps(newProps); } } componentWillUnmount() { this.canvas.remove(); } render() { return <div ref={(wrapper) => this.wrapper = wrapper} />; } } // you can watch the sketch in action here (https://p5js.org/examples/simulate-game-of-life.html) const gameOfLife = (props) => (p) => { let w; let columns; let rows; let board; let next; p.setup = () => { p.createCanvas(1024, 768); p.background(255); p.noStroke(); w = 20; columns = p.floor(p.width / w); rows = p.floor(p.height / w); board = new Array(columns); for (let i = 0; i < columns; i++) { board[i] = new Array(rows); } next = new Array(columns); for (let i = 0; i < columns; i++) { next[i] = new Array(rows); } init(); }; p.draw = () => { generate(); for (let i = 0; i < columns; i++) { for (let j = 0; j < rows; j++) { if ((board[i][j] === 1)) p.fill(0); else p.fill(255); p.rect(i * w, j * w, w - 1, w - 1); } } }; p.mousePressed = () => { init(); }; const init = () => { for (let i = 0; i < columns; i++) { for (let j = 0; j < rows; j++) { if (i === 0 || j === 0 || i === columns - 1 || j === rows - 1) board[i][j] = 0; else board[i][j] = p.floor(p.random(2)); next[i][j] = 0; } } }; const generate = () => { for (let x = 1; x < columns - 1; x++) { for (let y = 1; y < rows - 1; y++) { let neighbors = 0; for (let i = -1; i <= 1; i++) { for (let j = -1; j <= 1; j++) { neighbors += board[x + i][y + j]; } } neighbors -= board[x][y]; if ((board[x][y] === 1) && (neighbors < 2)) next[x][y] = 0; else if ((board[x][y] === 1) && (neighbors > 3)) next[x][y] = 0; else if ((board[x][y] === 0) && (neighbors === 3)) next[x][y] = 1; else next[x][y] = board[x][y]; } } const temp = board; board = next; next = temp; }; }; // render the wrapper and the sketch ReactDOM.render(<P5Wrapper sketch={gameOfLife} />, document.getElementById("root"));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.0/p5.js"></script> <div id="root"/>

What could be causing the slowdown?什么可能导致放缓?

This seems to be caused due to low memory availability of RAM, it will runs smoothly when there sufficient memory available.这似乎是由于 RAM 的内存可用性低导致的,当有足够的可用内存时,它会顺利运行。 But when there is less memory P5.js is running at low frame rate.但是当内存较少时,P5.js 以低帧率运行。

Brief explanation I believe while we run react applications with node, surely it could hold a huge amount of RAM.简要说明我相信当我们使用 node 运行 react 应用程序时,它肯定可以容纳大量的 RAM。 Especially when we run react with node using 4GB or less RAM configuration, we could end up P5.js or any graphic content running in very low Frames per seconds.尤其是当我们使用 4GB 或更少的 RAM 配置对节点运行 react 时,我们最终可能会以非常低的每秒帧数运行 P5.js 或任何图形内容。

uplift the RAM or run in another machine提升 RAM 或在另一台机器上运行

Low memory availability in RAM RAM 中的内存可用性低

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM