首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在firefox的后台线程中运行pageMod?

在firefox的后台线程中运行pageMod?
EN

Stack Overflow用户
提问于 2012-04-24 10:38:11
回答 3查看 344关注 0票数 1

我必须制作一个firefox插件,根据一个单词列表(可能有6500个单词)搜索加载的页面,高亮显示匹配,并在悬停时显示同义词。

因此,我使用的是HightlightRegex.js,它遍历dom并基于regex进行搜索,regex使用regex \bMyWord\b

主要的问题是,当在一个有很多搜索词出现的页面上测试这个插件时,Firefox挂起一段时间(5-6秒),然后显示高光。这是发生在一个字,所以你可以想象会发生什么,如果我搜索6500字。

那么,我是否可以在后台线程中或异步地运行pageMod,并在不冻结UI的情况下突出显示匹配的单词?

您可以查看https://builder.addons.mozilla.org/addon/1042263/latest/的外接程序。

目前,插件并没有绑定到单独的选项卡上,而是作为一个整体在浏览器上运行,但我怀疑这会导致Firefox挂起。

我需要尽可能有效地做到这一点,所以我们非常欢迎你的建议。

EN

回答 3

Stack Overflow用户

发布于 2012-04-24 14:14:03

DOM通常不是线程安全的,除了主线程之外,您不能访问它。唯一的解决方案是将工作分解成较小的块,并使用setTimeout(..., 0)异步运行下一个块,而不阻塞所有内容。

票数 1
EN

Stack Overflow用户

发布于 2012-04-24 21:51:23

您可以尝试的一件事是使用页面工作者模块加载页面并处理它:

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

而且,正如Wladimir所建议的,只需使用异步代码搜索文档文本,以避免锁定firefox。

票数 1
EN

Stack Overflow用户

发布于 2012-05-20 05:12:51

正如canuckistani所暗示的,更好的解决方案只需要两个同步的DOM操作:读和写。撕开整个页面(更好的是,只撕开它的<body>),并将其发送到将执行高亮显示的异步工作人员或线程。当它完成时,工作人员会发出一个事件并传递突出显示的内容,现在该插件可以将其插入到页面中。

这样,唯一完成的同步操作是快速、廉价的,而其余的则是异步完成的,远离主线程。但是,canuckistani建议将页面加载到page-worker中:没有必要这样做,因为页面已经加载在选项卡中。只需加载一个假页面并插入实际内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10296275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档