Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   InlineWorker (https://javascript.ru/forum/project/25595-inlineworker.html)

FINoM 09.02.2012 22:40

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

FINoM 09.02.2012 22:46

Может вообще убрать этот 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:50.