Javascript.RU

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

Web Workers и видимость функций
Как в воркере обеспечить видимость глобальных функций, не относящихся к этому воркеру (т. е. созданных в основном потоке)?
P. S. Передача воркеру объекта window генерирует исключение

UPD
Я не сильно надеюсь на ответ, так как сабж еще малоизвестен. Мне нужно каким-то образом подключить библиотеку (http://www.leemon.com/crypto/BigInt.js), но не могу ее просто импортировать в поток, так как там куча глобальных переменных. Пытаюсь аяксом обращаться к js файлу и применить функцию eval, но почему-то это не срабатывает. Уже пробовал
eval('(function(){'+this.responseText+'})()'); //и так
eval('('+this.responseText+')'); //и так
Пока что пытаюсь это сделать в контексте window, но функции не видны. Что я делаю не правильно?

Последний раз редактировалось FINoM, 25.04.2011 в 05:07.
Ответить с цитированием
  #2 (permalink)  
Старый 25.04.2011, 08:38
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

лучше код (каркас) приведите того что вам нужно в итоге....
и наверное стоит обратить внимание на замыкания
Ответить с цитированием
  #3 (permalink)  
Старый 25.04.2011, 23:18
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

monolithed, Workers очень специфичная вещь, передавая объект с набором функций, воркер не видит их. Он их видит, как пустые объекты.
Сообщение от monolithed
лучше код (каркас) приведите того что вам нужно в итоге....
Тут собсно всё просто:

main.js:
var obj = {f: function(){return 'ok';}}
var worker = new Worker('worker.js');
worker.postMessage(obj);

worker.onmessage = function(e){
  console.log(e.data);
};


worker.js:
onmessage = function(e){
  postMessage(e.data.f()); //TypeError: object is not a function
}

Нужно каким-то образом заставить видеть воркер функции, которые я передаю. Нашел костыль, который запускаем в воркере:
importScripts('BigInt.js'); //подобие include
Так можно импортировать библиотеку, но вот как можно импортировать функцию или набор функций или функции, которые были созданы в главном потоке без создания еще одного файла — хз.
Ответить с цитированием
  #4 (permalink)  
Старый 28.04.2011, 08:08
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

функции не обязательно внутрь подключать, их можно через postMessage использовать, как вариант. В случае библиотеки лучше импортировать ее с помощью importScripts, в чем здесь костыль - непонятно
Ответить с цитированием
  #5 (permalink)  
Старый 28.04.2011, 15:39
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
их можно через postMessage использов
Не получается. Функции передаются как пустой объект.
Ответить с цитированием
  #6 (permalink)  
Старый 28.04.2011, 17:05
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Конечно, postMessage передаёт только строки.
Ответить с цитированием
  #7 (permalink)  
Старый 28.04.2011, 23:36
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
Не получается. Функции передаются как пустой объект.
я не говорю о передаче фукций, я говорю об использовании postMessage как способа вызова функций в другом потоке
Ответить с цитированием
  #8 (permalink)  
Старый 29.04.2011, 02:17
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Kolyaj
Конечно, postMessage передаёт только строки.
Он передает всё, кроме функций.
Сообщение от x-yuri
я не говорю о передаче фукций, я говорю об использовании postMessage как способа вызова функций в другом потоке
Это уже точно костыль (отталкиваясь от первого поста в теме). Поигравшись немного с "importScripts" уже привык, так что пофиг.
Ответить с цитированием
  #9 (permalink)  
Старый 30.04.2011, 07:47
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

для импорта js-файлов - костыль, но ты же говорил про импорт отдельных функций, так что может пригодится, теоретически...
Ответить с цитированием
  #10 (permalink)  
Старый 30.04.2011, 22:07
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
но ты же говорил про импорт отдельных функций
Я говорю про импорт а не про запуск по команде из postMessage
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как взломать K9 web protection admin? Questioner Оффтопик 1 19.02.2011 22:39
Мастер-класс по Highload: Разработка крупного масштабируемого web 2.0 проекта с нуля [DiMA] Серверные языки и технологии 30 17.11.2010 21:57
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Как получить список пользовательских функций объекта window? Маэстро Events/DOM/Window 13 03.07.2010 13:20