javascript - 昂贵计算的示例
问题描述
我正在学习如何衡量性能,并想使用一些需要大约 1-2 秒来计算的代码。
我使用了以下从Mozilla获取的代码,但我想知道是否有人可以帮助我进行更简洁的操作。它不必“有意义”。
const iterations = 50;
const multiplier = 1000000000;
function calculatePrimes(iterations, multiplier) {
var primes = [];
for (var i = 0; i < iterations; i++) {
var candidate = i * (multiplier * Math.random());
var isPrime = true;
for (var c = 2; c <= Math.sqrt(candidate); ++c) {
if (candidate % c === 0) {
// not prime
isPrime = false;
break;
}
}
if (isPrime) {
primes.push(candidate);
}
}
return primes;
}
function doPointlessComputationsWithBlocking() {
var primes = calculatePrimes(iterations, multiplier);
pointlessComputationsButton.disabled = false;
console.log(primes);
}
解决方案
以“需要时间”为目的进行操作的最简单方法是只在一段时间内不做任何事情:
function wait(seconds) {
var start = new Date();
//empty while loop until the required amount of time has passed
while((new Date() - start) / 1000 < seconds);
}
var begin = performance.now();
console.log("start");
wait(2);
console.log("finish in", performance.now() - begin, "ms");
如果您需要它不确定,您可以添加或修改随机数量的等待时间:
function wait(seconds) {
// add or subtract up to 50%
seconds *= Math.random() + 0.5;
var start = new Date();
while((new Date() - start) / 1000 < seconds);
}
var begin = performance.now();
console.log("start");
wait(2);
console.log("finish in", performance.now() - begin, "ms");
推荐阅读
- mplab - MPLAB X IDE 模拟器文档
- crystal-reports - Crystal Reports – 导出时的额外列(仅限 Microsoft Excel (97-2003) 格式)
- c# - .NET 5:未找到导入或有错误
- google-app-engine - 创建 Google App Engine 服务的新实例
- ios - 如何将 XIB 中的按钮连接到 ViewController 中的 UITextField (Swift 4)
- python - 在 uWsgi 环境中从 python 工作进程记录到文件
- reactjs - 请求的资源 React Django 错误上不存在“Access-Control-Allow-Origin”标头
- r - 在 r 中绘制列表时 xaxt = n 不起作用
- javascript - 使用 Axios 在 Node.js 中同步进行多个 Web api 调用而不嵌套
- java - 从链接android java下载文件的问题