1

ロードされたページを単語のリスト (潜在的に 6500 語) に対して検索し、一致を強調表示し、ホバー時に同義語を表示する Firefox アドオンを作成する必要があります。

だから私は、ドームを横断し、正規表現\bMyWord\bを使用している正規表現に基づいて検索するHightlightRegex.jsを使用しています。

主な問題は、検索ワードが多数出現するページでアドオンをテストすると、Firefox がしばらく (5 ~ 6 秒) ハングアップしてから、ハイライトが表示されることです。これは 1 語で起こっているので、6500 語を検索するとどうなるか想像できます。

バックグラウンド スレッドまたは非同期でpageModを実行し、UI をフリーズせずに一致する単語を強調表示する方法はありますか?

https://builder.addons.mozilla.org/addon/1042263/latest/でアドオンを確認できます。

現在、アドオンは個別のタブに関連付けられておらず、ブラウザー全体で実行されますが、Firefox がハングすることはないと思います。

これをできるだけ効率的に行う必要があるため、提案は大歓迎です。

4

3 に答える 3

1

page-worker モジュールを使用してページをロードして処理することもできます。

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

また、Wladimir が提案したように、非同期コードのみを使用してドキュメント テキストを検索し、Firefox がロックされないようにします。

于 2012-04-24T21:51:23.030 に答える
1

DOM は一般にスレッドセーフではなく、メイン スレッド以外からアクセスすることはできません。唯一の解決策は、作業を小さなチャンクに分割し、setTimeout(..., 0)すべてをブロックすることなく、非同期で次のチャンクを実行するために使用することです。

于 2012-04-24T14:14:03.830 に答える
1

canuckistani がほのめかしたように、より良い解決策は、読み取りと書き込みの 2 つの同期 DOM 操作のみを必要とすることです。ページ全体 (または、さらに良いのはそのページのみ<body>) をリッピングし、強調表示を実行する非同期ワーカーまたはスレッドに送信します。処理が完了すると、ワーカーはイベントを発行し、ハイライトされたコンテンツを渡します。これで、アドオンがページに挿入し直すことができます。

そうすれば、実行される同期操作は高速で安価なものだけになり、残りはメイン スレッドから離れて非同期で実行されます。ただし、canuckistani はページを a にロードすることを提案しましたpage-worker。ページは既にタブにロードされているため、その必要はありません。偽のページを読み込んで、実際のコンテンツを挿入するだけです。

于 2012-05-20T05:12:51.750 に答える