我们在使用Javascript中的
下面显示了一个简单的样例代码:
codesandbox
有谁能解释一下发生了什么?
setTimeout
函数时,遇到了一个奇怪的问题,尤其是在React中使用代码时,使用setTimeout
比不使用setTimeout
运行得慢得多!与不使用setTimeout
相比,性能的差异如下:在API回调中(例如使用
setTimeout
: 1391 毫秒
不使用setTimeout
: 15 毫秒
axios
),也会出现使用setTimeout的情况!下面显示了一个简单的样例代码:
codesandbox
有谁能解释一下发生了什么?
import React, { useState } from "react";
import ReactDOM from "react-dom";
function App() {
const [value, setValue] = useState("");
const [time, setTime] = useState("");
const startSample = () => {
const startTimeStamp = new Date().valueOf();
for (let i = 0; i < 5000; i++) {
setValue(`test-${i}`);
// console.log(`test-${i}`);
}
const endTimeStamp = new Date().valueOf();
setTime(`${endTimeStamp - startTimeStamp}ms`);
};
const handleClick1 = () => {
startSample();
};
const handleClick2 = () => {
setTimeout(() => {
startSample();
});
};
return (
<div style={{ textAlign: "left" }}>
<p>{value || "Please push that button!"}</p>
<div>
<button id="startBtn" onClick={handleClick1}>
Start Normal
</button>
<button id="startBtn1" onClick={handleClick2}>
Start With setTimeout
</button>
</div>
<p>Result: {time}</p>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
setTimeout
包装时,实际上会生成5000次渲染而不仅仅是一次。 - DupocassetTimeout
版本一样。 - Siyavash Hamdi