InlineWorker
Web Workers — замечательная штука. Я люблю их использовать при первой же возможности, когда требуется обработать большой объем данных. Недавно появилась задача распарсить очень крупный JSON. Всё отлично, берем JSON.parse и пихаем его в отдельный скрипт. Нет, что-то не то. Пара строк в отдельном JS файле? Фигня. Почему бы не сделать что-то типа такого:
Worker(function(){ onmessage= function( e ){ postMessage( JSON.parse( e.data) ); } }); Как говорится, сделал. А использовал я вот этот ответ: http://stackoverflow.com/questions/5...454685#6454685 И эту либу, предназначенную для старых браузеров для эмуляции поддержки воркеров: http://code.google.com/p/ie-web-worker/ Код пока что не оформлял, тупо запхал его в html. Чуть позже запилю на гитхаб и, может быть, писану ха хабру. Если текущий браузер не поддерживает объект URL или BlobBuilder, то инлайновый воркер будет работать в однопоточном режиме (будет включена эмуляция, как для старых браузеров). Обычный воркер будет работать по-прежнему. Для старых браузеров и обычный и инлайновый будут эмулироваться. //Тупо возвращает инстанс конструктора Worker var worker = InlineWorker( function(){ onmessage = function(e) { postMessage('msg from worker, ' + e.data); }; }); worker.onmessage = function(e) { alert(e.data); } worker.postMessage( 'msg from window' ); Сабж: http://dl.dropbox.com/u/13598455/Inl...ker/index.html |
Может вообще убрать этот onmessage из входной функции?
UPD. Все-таки удалил: var worker = InlineWorker( function( e ){ postMessage('msg from worker, ' + e.data); }); worker.onmessage = function(e) { alert(e.data); } worker.postMessage( 'msg from window' ); |
Часовой пояс GMT +3, время: 23:15. |