Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Web Workers - возможна ли передача в поток строки кода JS (https://javascript.ru/forum/misc/44629-web-workers-vozmozhna-li-peredacha-v-potok-stroki-koda-js.html)

javandernufirzam 27.01.2014 12:37

Web Workers - возможна ли передача в поток строки кода JS
 
почитал пару статей на тему WW
и понял что создается поток так:

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

в конструктор передается адрес скрипта


вопрос - можно ли конструктору передавать полный текст скрипта -
new Worker('скрипт')
new Worker(eval(x))

смысл в том что есть задача генерировать код для потоков программно, без обращения к файловой системе и к серверу
без использования статического когда js например уже загруженного в теле документа

Яростный Меч 27.01.2014 13:03

можно сделать Blob и передать на него ссылку.

https://developer.mozilla.org/en-US/...ng_web_workers

параграф Embedded workers

kobezzza 27.01.2014 13:11

https://github.com/padolsey/operative

javandernufirzam 27.01.2014 13:16

спасибо товарищи. но мне надо понятнее и на русском, чтобы самому сделать а не изучать чужие фреймворки

Яростный Меч 27.01.2014 13:27

Цитата:

Сообщение от javandernufirzam
чтобы самому сделать

var code = 'postMessage(123);';
var blob = new Blob([code],{type: "text/javascript"});
var ref = URL.createObjectURL(blob);
var worker = new Worker(ref);
worker.onmessage = function (oEvent) {
    alert("data from worker: " + oEvent.data);
};
URL.revokeObjectURL(ref);

javandernufirzam 27.01.2014 13:39

спасибо. но вторую половину не понял, строки 4-8
поясни пожста чо это

Яростный Меч 27.01.2014 14:00

Цитата:

Сообщение от javandernufirzam
но вторую половину не понял, строки 4-8

4 - создается воркер по тому "урлу", который внутри себя неким образом содержит строку с кодом.
5-7 - механизм обмена данными с воркером, здесь он для демонстрации работы и к теме отношения не имеет.
8 - убиваем ссылку на блоб, чтобы не повисла и не было утечек памяти.

Яростный Меч 27.01.2014 14:02

тут основная идея как раз в строках 2-3, для их осознания раскури html5 FileAPI

javandernufirzam 27.01.2014 14:05

var code = 'postMessage(123);';
var blob = new Blob([code],{type: "text/javascript"});
var ref = URL.createObjectURL(blob);
var worker = new Worker(ref);
.....
URL.revokeObjectURL(ref);


- то есть такова обязательная последовательность


спасибо

javandernufirzam 27.01.2014 14:20

Цитата:

Сообщение от Яростный Меч (Сообщение 294342)
тут основная идея как раз в строках 2-3, для их осознания раскури html5 FileAPI

понял

но ничож более знать-то не надо для запуска и работы в таком режиме ?
я могу просто вставить такой кусок кода и всё - готовое решение ? не ?


Часовой пояс GMT +3, время: 06:24.