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, время: 14:18. |