相关疑难解决方法(0)

中断循环的 WebWorker

我有一个专用的网络工作人员,在收到启动信号后,它会进入一个长循环,并且根据某些启动设置,该循环将在给定的执行点“屈服”。

这是我的代码的简化版本

var mode = null;
var generator = null;

function* loop() {

    for(var i=0;i<10000;i++) {
        //Do stuff
        for(var j=0;j<10000;j++) {
            //Do stuff
            if( mode == 'inner' ){
                //Yield after each inner loop iteration
                yield 2;
            }
        }
        if( mode == 'outer' ){
            //Yield after each outer loop iteration
            yield 1;
        }
    }

    /*
    If mode is not inner or outer the function won't yield 
    and will process the whole loop in one shot
    */
    return null;

}

generator = …
Run Code Online (Sandbox Code Playgroud)

javascript yield web-worker ecmascript-6

6
推荐指数
1
解决办法
1891
查看次数

有没有比 setTimeout(0) 更快的让 Javascript 事件循环的方法?

我正在尝试编写一个执行可中断计算的网络工作者。Worker.terminate()我知道这样做的唯一方法(除了)是定期让步给消息循环,以便它可以检查是否有任何新消息。例如,这个网络工作者计算从 0 到 的整数之和data,但是如果您在计算过程中向它发送一条新消息,它将取消计算并开始新的计算。

let currentTask = {
  cancelled: false,
}

onmessage = event => {
  // Cancel the current task if there is one.
  currentTask.cancelled = true;

  // Make a new task (this takes advantage of objects being references in Javascript).
  currentTask = {
    cancelled: false,
  };
  performComputation(currentTask, event.data);
}

// Wait for setTimeout(0) to complete, so that the event loop can receive any pending messages.
function yieldToMacrotasks() {
  return new Promise((resolve) => setTimeout(resolve));
} …
Run Code Online (Sandbox Code Playgroud)

javascript event-loop settimeout web-worker

6
推荐指数
1
解决办法
446
查看次数

使用Canvas为JS中的排序算法设置动画

为了好玩,我试图创建不同排序算法的可视化,但我遇到了Canvas动画的问题.

我假设我只能在分拣机方法中调用绘图函数,但这会导致浏览器锁定,直到数组完全排序,然后绘制一些中间框架.

我如何从排序方法中进行动画制作?下面是我到目前为止的代码,我不会运行此代码片段,因为它将挂起标签几秒钟.

N = 250; // Array Size
XYs = 5; // Element Visual Size
Xp = 1; // Start Pos X
Yp = 1; // Start Pos Y
var canvas;
var l = Array.apply(null, {
  length: N
}).map(Number.call, Number);

Array.prototype.shuffle = function() {
  var i = this.length,
    j, temp;
  if (i == 0) return this;
  while (--i) {
    j = Math.floor(Math.random() * (i + 1));
    temp = this[i];
    this[i] = this[j];
    this[j] = temp;
  }
  return this;
} …
Run Code Online (Sandbox Code Playgroud)

javascript sorting algorithm html5 canvas

1
推荐指数
1
解决办法
603
查看次数