是否可以故意减慢Javascript Interpreter的速度?

时间:2015-11-02 17:56:34

标签: javascript performance testing

我想让我的浏览器更慢地执行javascript代码。是否有浏览器插件或其他什么要做?

背景:我想展示执行时间对给定浏览器游戏的影响。这个游戏的速度只受其代码执行时间的限制,就像在旧的MS-DOS游戏中一样。为了向学生展示这种编码的影响(取决于CPU周期而不是时间),如果我可以降低代码的执行速度,那就太棒了。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

对于实际的sleep function in JavaScript来说,这听起来像是一个合适的用例 - 只需在代码中放置一个繁忙的循环,直到时间变​​化为止。

function sleep(µs) {
     var end = performance.now() + µs/1000;
     while (end > performance.now()) ; // do nothing
}

答案 1 :(得分:0)

创建一个计算fibonacci的函数(限制为最大值以便不杀死浏览器),并在其他函数之间调用它:

function fibo(max) {
    var x = 0;
    for (var i = 0, j = 1, k = 0; k < max; i = j, j = x, k++) {
        x = i + j;
    }
}

然后只需在其他函数调用之间调用它:

doSomething();
fibo(15);
doSomethingElse();
fibo(15);
doSomethingElseElse();
fibo(15);

答案 2 :(得分:0)

此代码将尽可能快地绘制/循环

function loop() {
  draw();
  loop();
}

此代码将人为地为每个循环周期添加约100毫秒的时间

function loop() {
  draw();
  setTimeout(loop, 100);
}

当我创建这样的循环时,我使用的是delta,因此可以进行精确的计算

function draw(delta) {
  console.log("%f ms", delta);
}

function loop(last) {
  var now = performance.now();
  var delta = now - last;
  draw(delta);
  setTimeout(function() { loop(now); }, 100);
}

loop(0);

// 102.51500000001397 ms
// 102.38000000000466 ms
// 105.33499999996275 ms
// 101.27500000002328 ms
// 103 ms
// 100.88000000000466 ms
// 100.9649999999674 ms
// 100.69500000000698 ms
// 102.01500000001397 ms
// 105.85499999998137 ms

正如您所看到的,每隔100毫秒就会调用一次绘制。这大约是每秒10帧。您现在可以使用此增量对动画序列或定位移动元素等内容进行精确计算

您可以轻松地将其设为循环变量

function framesPerSecond(x) {
  return 1e3/x;
}

function draw(delta) {
  console.log("%f ms", delta);
}

function loop(fps, last) {
  var now = performance.now();
  var delta = now - last;
  draw(delta);
  setTimeout(function() { loop(fps, now); }, fps);
}

loop(framesPerSecond(25), 0); // 25 frames per second
// 42.8150000000023 ms
// 42.1600000000035 ms
// 44.8150000000023 ms
// 41.8299999999872 ms
// 43.195000000007 ms
// 41.7250000000058 ms
// 42.1349999999802 ms
// 43.0950000000012 ms

您现在可以非常轻松地模拟任何帧速率

loop(framesPerSecond(0.5), 0); // 1 frame per 2 seconds
// 2001.58 ms
// 2002.705 ms
// 2005.9 ms
// 2001.665 ms
// 2002.59 ms
// 2006.165 ms
  

注意:<{strong> framesPerSeconddraw需要很长时间才能完成时不会非常准确。您可以通过衡量draw运行每个周期所需的持续时间并从fps延迟中减去该值来改善这一点。