Как ограничить время выполнения функции в JavaScript?
Ситуация такова:
Пользователь пишет некоторый js-код, и он должен быть запущен на некоторых данных (локально).
Но иногда бывают бесконечные циклы или рекурсивные вызовы... Вот почему мне нужно ограничить время выполнения функции, а не редактировать саму функцию (и даже если так - нужно ли вставлять проверки после каждой точки последовательности? Но как насчет рекурсивных вызовов?)
Есть ли другие решения этой странной проблемы? Может быть, eval может дать какое-то дерево разбора кода или что-то в этом роде?
2 ответа
Возможным решением является использование веб-работников. Веб-работник запускается в отдельном потоке и может быть прерван.
var worker = new Worker('my_task.js');
...
worker.terminate();
Недостатком является то, что не все браузеры поддерживают Web Workers.
Это в браузере или в узле?
В браузере вы можете поместить свой код в 0 секунд setTimeout
освободить цикл выполнения (и временно разблокировать браузер)
setTimeout(function() {
// your code here
}, 0)
у узла есть что-то более причудливое, похожее на это, и немного лучше:
process.nextTick(function() {
// frees up the run loop even faster
});