11

状況は次のとおりです。

ユーザーがいくつかのjsコードを記述し、それをいくつかのデータで(ローカルで)実行する必要があります。

しかし、無限ループや再帰呼び出しがある場合があります…そのため、関数の実行時間を制限する必要がありますが、関数自体を編集する必要はありません(その場合でも、すべてのシーケンスポイントの後にチェックを挿入する必要がありますか?しかし、再帰呼び出しはどうですか? )。

この奇妙な問題に対する他の解決策はありますか?たぶんevalはコードの解析ツリーなどを与えることができますか?

4

2 に答える 2

6

考えられる解決策は、Web Workersを使用することです。Web ワーカーは別のスレッドで開始され、終了することができます。

var worker = new Worker('my_task.js');
...
worker.terminate();

欠点は、すべてのブラウザーがWeb Workerをサポートしているわけではないことです。

于 2013-01-12T22:02:35.310 に答える
1

これはブラウザにありますか、それともノードにありますか?

setTimeoutブラウザでは、実行ループを解放するためにコードを 0 秒で配置できます (ブラウザのブロックを一時的に解除します)。

setTimeout(function() {
   // your code here
}, 0)

node には、次のような手の込んだものがあり、わずかに優れています。

process.nextTick(function() {
   // frees up the run loop even faster
});
于 2013-01-12T22:00:31.550 に答える