browser.runtime.sendMessage API在Firefox扩展上缓慢发送大数据
我使用firefox扩展(firefox 54-64位)的browser.runtime.sendMessage API将contentscript中的大量二进制数据发送到后台 发送消息的速度非常慢,并根据contentscript发送的数据大小,使firefox在3-5秒内不响应。然后正常工作,后台接收消息 chrome sendMessage API上的运行迅速且非常平稳。 我如何在firefox中修复它browser.runtime.sendMessage API在Firefox扩展上缓慢发送大数据,firefox,firefox-addon,firefox-addon-webextensions,Firefox,Firefox Addon,Firefox Addon Webextensions,我使用firefox扩展(firefox 54-64位)的browser.runtime.sendMessage API将contentscript中的大量二进制数据发送到后台 发送消息的速度非常慢,并根据contentscript发送的数据大小,使firefox在3-5秒内不响应。然后正常工作,后台接收消息 chrome sendMessage API上的运行迅速且非常平稳。 我如何在firefox中修复它 browser.runtime.sendMessage(tab.id, { name:
browser.runtime.sendMessage(tab.id, { name: "sendScreen", data: { screen: screen} })
对象中的屏幕值是二进制数据(长度为~1135609的数组)
在background.js中,我添加了侦听器消息:
browser.runtime.onMessage.addListener (message, sender, sendResponse);
清单文件:
{
"name": "abc",
"background": {
"page": "background.html"
},
"browser_action": {
"default_icon": "icons/icon_19.png",
"default_popup": "login.html",
},
"content_scripts": [
{
"web_accessible_resources": [
"js/contentscripts/Browser.js",
],
"js": [
"js/contentscripts/ContentScript.js"
],
"matches": [
"file://*/*",
"http://*/*",
"https://*/*"
],
"run_at": "document_end",
"all_frames": true
},
{
"js": [
"js/contentscripts/Browser.js",
],
"matches": [
"file://*/*",
"http://*/*",
"https://*/*"
],
"run_at": "document_start",
"all_frames": true
}
],
"icons": {
"16": "icons/icon_16.png",
"19": "icons/icon_19.png"
},
"incognito": "spanning",
"permissions": [
"activeTab",
"tabs",
"http://*/*",
"https://*/*",
"<all_urls>"
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}
{
“名称”:“abc”,
“背景”:{
“页面”:“background.html”
},
“浏览器操作”:{
“默认图标”:“icons/icon_19.png”,
“默认弹出窗口”:“login.html”,
},
“内容脚本”:[
{
“网络可访问资源”:[
“js/contentscripts/Browser.js”,
],
“js”:[
“js/contentscripts/ContentScript.js”
],
“匹配项”:[
“文件://*/*”,
“http://*/*”,
“https://*/*”
],
“运行时间”:“文件结束时间”,
“所有帧”:正确
},
{
“js”:[
“js/contentscripts/Browser.js”,
],
“匹配项”:[
“文件://*/*”,
“http://*/*”,
“https://*/*”
],
“运行时间”:“文档开始时间”,
“所有帧”:正确
}
],
“图标”:{
“16”:“icons/icon_16.png”,
“19”:“icons/icon_19.png”
},
“隐姓埋名”:“跨越”,
“权限”:[
“活动标签”,
“标签”,
“http://*/*”,
“https://*/*”,
""
],
“内容安全策略”:“脚本src'self”“不安全评估”;对象src'self”
}
如果上述问题没有解决,那么
否则,您可以尝试按照评论中提到的那样分割数据,这不会减少总体时间,但可能会减少对用户体验的影响,或者只是在他们修复webextensions错误之前不支持Firefox。如果所提到的问题没有解决
否则,你可以像评论中提到的那样尝试分割数据,这不会减少总体时间,但可能会减少对用户体验的影响,或者只是在他们修复webextensions错误之前不支持Firefox。最近在这一领域修复了一个相当重要的错误:尽管修复仅在Firefox 55中,您是否可以尝试Beta版、Dev版或夜间版本,看看是否有明显差异?将数据分成多个部分,分别发送,发送之间有
setTimeout()
延迟。即使setTimeout()
中的延迟为0毫秒,它仍然允许FF在不同消息之间执行其他操作。虽然这不一定会加快整个进程,但应该可以防止FF冻结。您是在多进程模式下运行,还是在单进程模式下运行?请提供可用于复制问题的完整版本。让MCVE只发送虚拟数据可能比包含构建实际数据所需的一切都要容易。如果这个问题在FF55中没有解决,我们将需要足够的时间来解决。您可以尝试使用广播频道api:它在firefox 55 beta:)上运行良好,如何在FF54中临时修复?当FF55释放时?。谢谢。最近在这方面修复了一个相当重要的错误:修复只在Firefox 55中,你能试试Beta版、Dev版或夜间版本,看看是否有明显的区别吗?将数据分成多个部分,分别发送,发送之间有setTimeout()
延迟。即使setTimeout()
中的延迟为0毫秒,它仍然允许FF在不同消息之间执行其他操作。虽然这不一定会加快整个进程,但应该可以防止FF冻结。您是在多进程模式下运行,还是在单进程模式下运行?请提供可用于复制问题的完整版本。让MCVE只发送虚拟数据可能比包含构建实际数据所需的一切都要容易。如果这个问题在FF55中没有解决,我们将需要足够的时间来解决。您可以尝试使用广播频道api:它在firefox 55 beta:)上运行良好,如何在FF54中临时修复?当FF55释放时?。谢谢