2014-02-17 2 views
2

Вот установка:Как реализовать рекурсивную функцию как веб-работника?

  1. Большой массив данных, подлежащих обработке в рекурсивной функции.
  2. Рекурсивная функция, которая работает как веб-работник, чтобы избежать ограничений размера стека.
  3. Обработчик результата, который вызывается после рекурсивной функции, достиг своего состояния «конец рекурсии».

Я проверил web worker specs, но они являются нечитаемыми и беспорядочными, чтобы дать простой ответ на простой вопрос.

То, что я не понимаю, что это

  1. Как передать данные функции (в веб-работника)
  2. Как получить результат из функции и знать, когда это сделано
  3. И почему я должен определить работник в отдельном JS-файле
+1

Взгляните сюда -> http://www.html5rocks.com/en/tutorials/workers/basics/ –

+1

Передача данных в функцию осуществляется путем ее вызова. Однако передача данных веб-работнику осуществляется путем отправки ему события. То же самое для наоборот: вместо того, чтобы принимать результат вызова, вам нужно прослушать событие. Рабочие должны быть в отдельных файлах, потому что они имеют полностью раздельные среды. – Bergi

ответ

1

Как упоминалось Bergi, вы передаете данные своим веб-работникам и используя их.

Относительно # 3 - Существует концепция «встроенных рабочих», где вы создаете объект blob, а затем создаете объект url. Что-то вроде:

var blobURL = URL.createObjectURL(new Blob([ '(', 
    function(){ 
     self.addEventListener('message', function (e){ 
      // Do stuff with array here 
     }.toString(), 
    ')()' ], { type: 'application/javascript' })), 

worker = new Worker(blobURL); 

worker.postMessage(/* big array */); 

Вы можете найти информацию о встроенных рабочих здесь:

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers

Я бросил вместе эту скрипку с встраиваемыми веб-работника и (простой) рекурсивной функции: http://jsfiddle.net/tQcuy/

+0

Это именно то, что я искал. – setec

Смежные вопросы