Vic*_*ina 2 javascript performance
我有一个最初是假的布尔值。但是在未来的某个时候,如果它的值发生变化(可以更改多次,但只能更改为相同的)。
例如,使用给定的伪代码
const hasChanged = false; // stateful
// This function can be called multipe times
const handleSubmit = () => {
// ...
hasChanged = true;
// ...
}
Run Code Online (Sandbox Code Playgroud)
我总是将值 'true' 重新分配给我的布尔值......我认为,也许可以通过首先检查它是否为假来优化它,如下所示:
const handleSubmit = () => {
// ...
!hasChanged && hasChanged = true;
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这只有在条件检查(读取 + 检查)比 JS 中的写入操作更快时才成立,这是我不知道的。
有任何想法吗?
无条件分配值,而不先测试它,可能会快一点:
作为一般经验法则,分支比直线代码慢(在所有 CPU 和所有编程语言上)。- jmrk,V8 开发者
这与著名问题背后的推理思路相同:为什么处理排序数组比处理未排序数组更快?
也就是说,这极不可能成为性能瓶颈。这不值得担心。
以下微基准似乎证实了这一点,尽管微基准并不是那么可靠:
const len = 1e8;
const arr = Array.from({ length: len }, () => Math.random() < 0.5);
setTimeout(() => {
// Wait for window to load completely and be free of CPU load
const t0 = performance.now();
for (let i = 0; i < len; i++) {
if (!arr[i]) arr[i] = true;
}
console.log(performance.now() - t0);
}, 2000);
console.log('timeout set');Run Code Online (Sandbox Code Playgroud)
const len = 1e8;
const arr = Array.from({ length: len }, () => Math.random() < 0.5);
setTimeout(() => {
// Wait for window to load completely and be free of CPU load
const t0 = performance.now();
for (let i = 0; i < len; i++) {
arr[i] = true;
}
console.log(performance.now() - t0);
}, 2000);
console.log('timeout set');Run Code Online (Sandbox Code Playgroud)
在我的机器上,条件分配平均需要 500 毫秒左右,而无条件分配平均需要 80 毫秒左右。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |