Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2012, 22:40
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

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
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2012, 22:46
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Может вообще убрать этот 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' );
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности

Последний раз редактировалось FINoM, 09.02.2012 в 22:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск