2013-01-12 3 views
7

상황은 다음과 같습니다.자바 스크립트에서 함수의 실행 시간을 제한하는 방법은 무엇입니까?

사용자가 일부 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입니다. 웹 작업자는 별도의 스레드에서 시작되어 종료 될 수 있습니다.

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

아래쪽은 not all browsers support 웹 근로자입니다.

+1

또한 웹 근로자는 DOM 요소에 액세스 할 수 없습니다. 이것은 분명히 알려지지 않은 코드이기 때문에 문제가 될 수 있습니다. –

+0

참고 : 평상시처럼, 작업자를 포함한 백그라운드 스레드는 DOM을 조작 할 수 없습니다. 백그라운드 스레드가 수행 한 작업이 DOM을 변경해야하는 경우 해당 작업을 수행하기 위해 작성자에게 메시지를 게시해야합니다. – asgoth

관련 문제