使我的浏览器变慢的Javascript代码

Fél*_*lli 15 javascript algorithm web-worker

我正在为WebWorkers编写一个库,我想测试在主页面线程中运行脚本与在一个或多个worker中运行脚本之间的区别.问题是:我无法找到一个短暂的功能,这将使我的浏览器充分紧张,我可以观察到差异.

快速搜索没有太多回复,但可能只是因为我真的不知道要搜索什么 ; 通常我会尝试优化我的代码,而不是让它变慢...

我正在寻找可以在纯Javascript中轻松实现的算法或模式,它们不依赖于DOM或XHR,并且可以传递一个参数来限制或指定计算的进度(没有无限的算法); 1s <平均时间<10s.

额外的点,如果它可以在没有递归的情况下构建,并且如果它不会产生大量的内存占用,同时仍然尽可能地处理器.

mae*_*ics 11

尝试使用Fibonacci序列的明显(和坏)递归实现:

function fib(x) {
  if (x <= 0) return 0;
  if (x == 1) return 1;
  return fib(x-1) + fib(x-2);
}
Run Code Online (Sandbox Code Playgroud)

使用~30到~35的值(完全取决于您的系统)调用它应该在您寻求的范围内产生良好的"减速"时间.调用堆栈不应该变得非常深,算法就像O(2^n).

  • 完善.我想,WebWorkers是*快*.`fib(30)`〜= 5s in main,<1s in worker.`fib(35)`坠毁主,工人约3s.哇! (4认同)

bho*_*nes 7

/**
 * Block CPU for the given amount of seconds
 * @param {Number} [seconds]
 */
function slowdown(seconds = 0.5) {
  const start = (new Date()).getTime()
  while ((new Date()).getTime() - start < seconds * 1000){}
}

slowdown(2)
console.log('done')
Run Code Online (Sandbox Code Playgroud)

调用此方法将使代码减慢给定的秒数(精度约为 200 毫秒)。