2013-01-12 26 views
7

状況は次のとおりです。javascriptで関数の実行時間を制限する方法は?

ユーザーはいくつかのjsコードを書き込みます。ユーザーはいくつかのデータ(ローカル)で実行する必要があります。

しかし、無限ループや再帰呼び出しがあることがあります。そのため、関数の実行時間を制限する必要がありますが、関数自体を編集しないようにする必要があります。再帰呼び出し?)

についてこの奇妙な問題の他の解決策はありますか?たぶんevalはコードのような構文木を与えることができますか?

+0

あなたは、単に無限ループ/再帰を回避するために、実行を中断しようとしていることを好む理由はありますか? –

+0

あなたがローカルでいくつかのデータで動作すると言うと、あなたのマシン上で、またはあなたのコントロール下にある一部のサーバー上でローカルであることを意味します。後者の場合、これはNode.js環境のようなもので動作していますか? – DWright

+0

その理由は、スクリプトが私の – user1431314

答えて

2

は、ブラウザまたはノードで、このですか?

あなたが実行ループを解放(および一時的にブラウザのブロックを解除)するために0秒 setTimeoutにコードを置くことができるブラウザで

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

ノードは次のようになりますと若干良好である手の込んだものを持っています:

process.nextTick(function() { 
    // frees up the run loop even faster 
}); 
5

可能な解決方法は、Web Workersです。 Webワーカーは別のスレッドで開始され、終了することができます。

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

弱点はnot all browsers support Webワーカーです。

+1

また、WebワーカーはDOM要素にアクセスできません。明らかにこれは未知のコードなので、問題になる可能性があります。 –

+0

注:通常どおり、ワーカーを含むバックグラウンドスレッドはDOMを操作できません。バックグラウンドスレッドによって行われたアクションがDOMを変更する必要がある場合、その作業を行うために作成者にメッセージをポストする必要があります。 – asgoth

関連する問題