Хобрук: Ваш путь к мастерству в программировании

Запустить pageMod в фоновом потоке в Firefox Addon SDK?

Мне нужно сделать аддон Firefox, который ищет загруженную страницу по списку слов (потенциально 6500 слов), выделяет совпадения и показывает синонимы при наведении курсора.

Итак, я использую HightlightRegex.js, который проходит через dom и выполняет поиск на основе регулярного выражения, использующего регулярное выражение \bMyWord\b.

Основная проблема заключается в том, что при тестировании аддона на странице, где есть много вхождений искомого слова, Firefox зависает на некоторое время (5-6 секунд), а затем показывается выделение. Это происходит для 1 слова, поэтому можно только представить, что произойдет, если я найду 6500 слов.

Итак, есть ли способ запустить pageMod в фоновом потоке или асинхронно и выделять слова по мере их сопоставления без зависания пользовательского интерфейса?

Вы можете ознакомиться с надстройкой по адресу https://builder.addons.mozilla.org/addon/1042263/latest/

В настоящее время надстройка не привязана к отдельным вкладкам и работает как единое целое в браузере, но я сомневаюсь, что это приведет к зависанию Firefox.

Мне нужно сделать это максимально эффективно, поэтому предложения очень приветствуются.


Ответы:


1

DOM, как правило, не является потокобезопасным, и вы не можете получить к нему доступ из чего-либо, кроме основного потока. Единственным решением было бы разбить работу на более мелкие фрагменты и использовать setTimeout(..., 0) для асинхронного запуска следующего фрагмента, не блокируя все.

24.04.2012
  • не могли бы вы уточнить немного больше? даже если я запущу поиск в setTimeout, это не заблокирует, пока работает функция set timeout. простой пример, объясняющий суть, был бы очень полезен. 25.04.2012
  • @PankajKumar: Да, он будет блокироваться, поэтому за один тайм-аут должен обрабатываться только небольшой фрагмент. Затем он должен вызвать setTimeout() и разрешить браузеру обрабатывать события до обработки следующего фрагмента. 25.04.2012

  • 2

    Вы можете попробовать использовать модуль page-worker для загрузки страницы и ее обработки:

    https://addons.mozilla.org/en-US/developers/docs/sdk/1.6/packages/addon-kit/page-worker.html

    И, как предложил Владимир, используйте только асинхронный код для поиска по тексту документа, чтобы избежать блокировки Firefox.

    24.04.2012

    3

    Как намекнул Канукистани, лучшее решение требует только двух синхронизированных операций DOM: чтения и записи. Скопируйте всю страницу (или, что еще лучше, только ее <body>) и отправьте ее асинхронному рабочему процессу или потоку, который выполнит подсветку. Когда это будет сделано, worker генерирует событие и передает выделенный контент, который аддон теперь может вставить обратно на страницу.

    Таким образом, единственные синхронные операции выполняются быстро и недорого, а остальные выполняются асинхронно, вдали от основного потока. Однако canuckistani предложил загрузить страницу в page-worker: в этом нет необходимости, так как страница уже загружена во вкладке. Просто загрузите поддельную страницу и вставьте реальный контент.

    20.05.2012
    Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..