Web Workers - возможна ли передача в поток строки кода JS
почитал пару статей на тему WW
и понял что создается поток так:
var worker = new Worker('worker.js');
в конструктор передается адрес скрипта вопрос - можно ли конструктору передавать полный текст скрипта -
new Worker('скрипт')
new Worker(eval(x))
смысл в том что есть задача генерировать код для потоков программно, без обращения к файловой системе и к серверу без использования статического когда js например уже загруженного в теле документа |
можно сделать Blob и передать на него ссылку.
https://developer.mozilla.org/en-US/...ng_web_workers параграф Embedded workers |
|
спасибо товарищи. но мне надо понятнее и на русском, чтобы самому сделать а не изучать чужие фреймворки
|
Цитата:
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);
|
спасибо. но вторую половину не понял, строки 4-8
поясни пожста чо это |
Цитата:
5-7 - механизм обмена данными с воркером, здесь он для демонстрации работы и к теме отношения не имеет. 8 - убиваем ссылку на блоб, чтобы не повисла и не было утечек памяти. |
тут основная идея как раз в строках 2-3, для их осознания раскури html5 FileAPI
|
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);
- то есть такова обязательная последовательность спасибо |
Цитата:
но ничож более знать-то не надо для запуска и работы в таком режиме ? я могу просто вставить такой кусок кода и всё - готовое решение ? не ? |
Цитата:
function workerFromCode(code) {
var blob = new Blob([code],{type: "text/javascript"});
var ref = URL.createObjectURL(blob);
var worker = new Worker(ref);
URL.revokeObjectURL(ref);
return worker;
}
Цитата:
содержит внутри себя массив байтов. Может быть отправлен на сервер через XHR, сохраняться в FileSystem, либо применяться как источник данных (вместе с URL createObjectURL/revokeObjectURL) для src картинок, фреймов, href ссылок - т.е. вместо ссылки на серверный http-ресурс |
спасибо!
если знаком с многопоточным программированием на десктопе - скажи, какая разница есть принципиальная |
Цитата:
воркеры - это чисто вычислительные потоки, лишенные доступа к UI. для взаимодействия с UI они используют очередь сообщений основного потока, закидывая туда команды функцией postMessage и получая оттуда команды через onmessage - этот механизм эквивалентен виндовой "очереди сообщений", в которую попадают события для окон. |
Цитата:
function foo() {
...
}
var blob = new Blob([foo.toString()], {type: "text/javascript"});
|
Цитата:
отсутствие перечисленных штуковин чего лишает меня в жизни? что я без них совсем не смогу сделать и жизнь моя на десктопе будет печальной то есть если я на десктопе обойдусь архитектурой из js Цитата:
|
Цитата:
навскидку трудно специально придумать. проще взять конкретный сценарий и разобраться - можно его реализовать только через очередь сообщений, или нет. |
получается - js в плане вычислений и интерфейса не уступает дестктопным приложениям ??
|
Цитата:
Насчет интерфейса - да, в современных браузерах не уступает (тут скорее надо говорить о html и особенно css), ну кроме всяких там иконок в трее и т.п. А вообще этот момент холиварный, и на форумах вроде "просто треп" (на sql.ru) всегда вызывает срач до потолка :) у веб-интерфейса основные недостатки - слабая поддержка устройств (типа сканера), буфера обмена, и прочих системных штук. |
Цитата:
|
здесь я говорю не о сферическом js в вакууме, а о связке технологий, хтмл5
это сложившийся фундамент веб приложений, ассемблер |
Цитата:
|
сомневаюсь я что нода это верный путь развития человечества...
|
| Часовой пояс GMT +3, время: 11:05. |