Параллелизм и многопоточность в расширениях Firefox - PullRequest
3 голосов
/ 29 февраля 2012

Я пишу расширение для Firefox, используя Add-on Builder и Add-on SDK.До сих пор я мог обходить любые ограничения, не переходя на XUL.Но я столкнулся с препятствием.

Мое расширение имеет длительный процесс, который может блокироваться, поэтому мне нужно отделить эту обработку от основного потока пользовательского интерфейса.Я прочитал вопрос здесь , но он не совсем отвечает на мой вопрос.Веб-работников недостаточно, поскольку длительный процесс требует доступа к js-ctypes и собственному коду.Таким образом, может показаться, что ChromeWorker справится с задачей.Но я не знаю, как получить к нему доступ от компоновщика дополнений.Кроме того, диспетчер потоков доступен только через код C ++.Как можно:

  1. Доступ и создание экземпляров Chrome Workers (или)
  2. Создание потоков (или)
  3. Ложный параллелизм (каким-либо образом)

, чтобы избежать блокировки потока пользовательского интерфейса.Кроме того, я мог бы свернуть свой собственный в нативный код (который я пытаюсь избежать).

1 Ответ

6 голосов
/ 01 марта 2012

Вы должны использовать Chrome Workers, они предназначены специально для использования js-ctypes в другом потоке. У менеджера потоков есть проблемы, и использование его из JavaScript было запрещено по причине. Однако основная проблема заключается в том, что конструктор ChromeWorker не отображается в модулях SDK для дополнений. Но вы можете получить его из chrome псевдомодуля:

var self = require("sdk/self");
var {ChromeWorker} = require("chrome");
var worker = new ChromeWorker(self.data.url("worker.js"));

Это работает только начиная с Firefox 8, в более ранних версиях вы использовали бы рабочую фабрику . Но я думаю, что вам это не нужно - новые версии SDK для дополнений в любом случае не поддерживают ничего, кроме Firefox 9.

Примечание : Вы должны обязательно выключить этого работника, если ваша надстройка отключена или удалена (например, с помощью unload module ), это не произойдет автоматически .

Редактировать : Мэтью Раттли описывает более простой подход к импорту рабочих в Chrome в своем подробном сообщении в блоге , я соответствующим образом обновил этот ответ.

...