测量 web worker 的执行时间
Measure execution time of web worker
我想测量计算因式分解的网络工作者的执行时间。 webworker 正在向实时结果发送消息,一旦计算终止,webworker 就会发送 'finished' 消息。我在我的 React 应用程序中使用了 promise 来做到这一点。
useEffect(() => {
const measureTimeStart = performance.now();
(async () => {
try {
await new Promise(resolve => {
const worker = new Worker(new URL('facto.js', import.meta.url));
worker.postMessage(number);
worker.onmessage = message => { //streaming live results
const { facto, status } = message.data;
setResults({ ...facto }); //adding them to React state
if (status === 'finished') {
resolve();
worker.terminate();
};
};
});
} catch (error) {
console.log(error)
}
})();
const measureTimeEnd = performance.now();
setExecutionTime(Math.round((measureTimeEnd - measureTimeStart) * 1000) / 1000 + ' ms');
}, [number]); //number to factorize
但是,performance.now()
不会等待承诺解决,因此给了我任意时间。为什么?谢谢。
您需要等待 promise 解决后再测量时间。使用 finally
或 then
useEffect(() => {
const measureTimeStart = performance.now();
(async () => {
try {
await new Promise(resolve => {
const worker = new Worker(new URL('facto.js', import.meta.url));
worker.postMessage(number);
worker.onmessage = message => { //streaming live results
const { facto, status } = message.data;
setResults({ ...facto }); //adding them to React state
if (status === 'finished') {
resolve();
worker.terminate();
};
};
});
} catch (error) {
console.log(error)
}
})().finally(() => {
const measureTimeEnd = performance.now();
setExecutionTime(Math.round((measureTimeEnd - measureTimeStart) * 1000) / 1000 + ' ms');
});
}, [number]); //number to factorize
useEffect(() => {
runWebWorker()
}, [number])
async function runWebWorker() {
const start = performance.now()
await ...
const end = performance.now()
}
或者,让您的工作人员发送性能数据,该数据更易于衡量并且不包括 postMessage
队列延迟。
我想测量计算因式分解的网络工作者的执行时间。 webworker 正在向实时结果发送消息,一旦计算终止,webworker 就会发送 'finished' 消息。我在我的 React 应用程序中使用了 promise 来做到这一点。
useEffect(() => {
const measureTimeStart = performance.now();
(async () => {
try {
await new Promise(resolve => {
const worker = new Worker(new URL('facto.js', import.meta.url));
worker.postMessage(number);
worker.onmessage = message => { //streaming live results
const { facto, status } = message.data;
setResults({ ...facto }); //adding them to React state
if (status === 'finished') {
resolve();
worker.terminate();
};
};
});
} catch (error) {
console.log(error)
}
})();
const measureTimeEnd = performance.now();
setExecutionTime(Math.round((measureTimeEnd - measureTimeStart) * 1000) / 1000 + ' ms');
}, [number]); //number to factorize
但是,performance.now()
不会等待承诺解决,因此给了我任意时间。为什么?谢谢。
您需要等待 promise 解决后再测量时间。使用 finally
或 then
useEffect(() => {
const measureTimeStart = performance.now();
(async () => {
try {
await new Promise(resolve => {
const worker = new Worker(new URL('facto.js', import.meta.url));
worker.postMessage(number);
worker.onmessage = message => { //streaming live results
const { facto, status } = message.data;
setResults({ ...facto }); //adding them to React state
if (status === 'finished') {
resolve();
worker.terminate();
};
};
});
} catch (error) {
console.log(error)
}
})().finally(() => {
const measureTimeEnd = performance.now();
setExecutionTime(Math.round((measureTimeEnd - measureTimeStart) * 1000) / 1000 + ' ms');
});
}, [number]); //number to factorize
useEffect(() => {
runWebWorker()
}, [number])
async function runWebWorker() {
const start = performance.now()
await ...
const end = performance.now()
}
或者,让您的工作人员发送性能数据,该数据更易于衡量并且不包括 postMessage
队列延迟。