XPCOM с использованием веб-воркеров из расширения Firefox

Мое расширение Firefox анализирует большие объемы данных. Я обычно использую для этого WebWorkers, однако в XPCOM мне кажется, что это не вариант. ChromeWorker, https://developer.mozilla.org/en-US/docs/Web/API/ChromeWorker кажется устаревшим и «не рекомендуется в новых проектах».

Есть ли какие-нибудь варианты использования воркеров в расширении Firefox?


person Mircea    schedule 14.01.2014    source источник


Ответы (1)


Краткая версия: нет, вы не можете получить доступ к XPCOM из другого потока. Но это не значит, что вы не можете использовать chrome worker.

Длинная версия: Firefox используется для разрешения доступа к XPCOM из других потоков, например через ChromeWorker. Это приводило ко всевозможным проблемам, таким как странные сбои или просто несогласованное поведение. В конце концов, Mozilla решила, что поддержка многопоточного доступа XPCOM слишком сложна и подвержена ошибкам, так как документировала ее ограничения и не позволяла людям стрелять себе в ноги.

В текущих версиях Firefox доступ к XPCOM из ChromeWorker больше невозможен. Сам ChromeWorker, однако, не является устаревшим, хотя комментарий MDN может быть легко неверно истолкован как общее заявление об устаревании. Идея состоит в том, что вы должны использовать ChromeWorker в сочетании с js-ctypes, что позволит вам использовать собственные библиотеки (те, которые предоставляются операционной системой, библиотеки, включенные в Firefox, такие как NSS, и библиотеки, распространяемые с вашим расширением) в другом потоке.

В зависимости от того, чего вы пытаетесь достичь, это может сработать для вас. Например, если вам нужен XPCOM для доступа к файлам, вам даже не нужно напрямую использовать js-ctypes - OS.File API сделает это за вас. Однако доступ XPCOM ограничен основным потоком.

person Wladimir Palant    schedule 14.01.2014
comment
Спасибо за ответ. Приложение берет файлы css и анализирует их, просматривая каждый символ с помощью string.charCodeAt (). Это может быть дорого. Хотел получить это из основного потока, не уверен, может ли OS.file помочь в этом случае. Спасибо. - person Mircea; 14.01.2014
comment
@Mircea: Если файл CSS на диске - да, конечно. Если файл CSS находится где-то в Интернете, вам все равно придется получить его в основном потоке (например, через async XMLHttpRequest) и затем передать данные работнику. - person Wladimir Palant; 14.01.2014
comment
Предполагая, что у меня уже есть содержимое CSS в объекте / строке Javascript, могу ли я использовать OS.File для передачи его содержимого и его синтаксического анализа с помощью моего парсера js из основного потока? Извините, я несколько озадачен этим. - person Mircea; 14.01.2014
comment
Нет, OS.File используется для чтения / записи файлов. Чтобы общаться между основным потоком и рабочим, вы используете сообщения ... - person Wladimir Palant; 14.01.2014