Javascript 如何消除chrome extension/Firefox插件弹出窗口的延迟?

Javascript 如何消除chrome extension/Firefox插件弹出窗口的延迟?,javascript,google-chrome-extension,download,popup,firefox-addon,Javascript,Google Chrome Extension,Download,Popup,Firefox Addon,我正在从chrome和firefox构建一个批量下载扩展,以下载大量文件。分机的弹出窗口具有取消/暂停/恢复功能。下载少量文件时,弹出窗口工作正常。但是,当下载大量文件时,弹出菜单实际上会永远弹出(或者有时不会弹出),这可能是因为扩展变得非常繁忙,并且一次处理大量文件。有没有办法消除这种延误 manifest.json "default_popup": "html/popup.html" }, popup.html let bgPage = chrome.extension.get

我正在从chrome和firefox构建一个批量下载扩展,以下载大量文件。分机的弹出窗口具有取消/暂停/恢复功能。下载少量文件时,弹出窗口工作正常。但是,当下载大量文件时,弹出菜单实际上会永远弹出(或者有时不会弹出),这可能是因为扩展变得非常繁忙,并且一次处理大量文件。有没有办法消除这种延误

manifest.json

    "default_popup": "html/popup.html"
  },
popup.html

let bgPage = chrome.extension.getBackgroundPage(); //Getting the variables from the background page

let idsOfDownload = [];
idsOfDownload = bgPage.downloadIds;
console.log(idsOfDownload);

let cancel = document.createElement("button");
cancel.id = "cancel";
cancel.className = "btn";
cancel.innerHTML='<i class="fa fa-stop-circle"></i> Cancel All</button>';
document.body.appendChild(cancel);

$('body').width(350); 

setInterval(function(){

    let downloadString = LZString.decompress(localStorage.getItem('downloadLinks'));

    if(downloadString === "") return;

    let downloadLinks =  JSON.parse(downloadString);

    if (downloadLinks !== undefined && downloadLinks !== null && downloadLinks !== "null") {
        let status = `Total pending download: ${downloadLinks.length}`;
        jQuery("#download-status").html(status);
    }
},1000);


$(cancel).click(function () {
    chrome.runtime.sendMessage({message: "cancel-download"});
});
让bgPage=chrome.extension.getBackgroundPage()//从后台页面获取变量
让idsOfDownload=[];
idsOfDownload=bgPage.downloadds;
console.log(idsOfDownload);
让cancel=document.createElement(“按钮”);
cancel.id=“取消”;
cancel.className=“btn”;
cancel.innerHTML='cancel All';
单据.body.appendChild(取消);
$(‘主体’)。宽度(350);
setInterval(函数(){
让downloadString=LZString.decompress(localStorage.getItem('downloadslinks'));
if(downloadString==“”)返回;
让downloadLinks=JSON.parse(downloadString);
if(下载链接!==未定义和下载链接!==空和下载链接!==“空”){
let status=`Total pending download:${downloadLinks.length}`;
jQuery(“#下载状态”).html(状态);
}
},1000);
$(取消)。单击(函数(){
chrome.runtime.sendMessage({message:“取消下载”});
});
  • 通常DOM速度很慢,所以如果您有很多元素,您应该只显示可见的内容,并在滚动时根据需要绘制其余的内容。这方面有很多库和框架

  • P>LZStand可以很慢的使用大的字符串,所以不要考虑使用它或者在A里面做它,并且通过标准DOM消息传递数据。 < L> > Windows .LoalSturn是同步的,所以如果数据大,也可以很慢,考虑切换到像Chrim.SturaG.本地或索引XDB。< /P> 异步存储。

最重要的是使用而不是猜测。分析结果后,您将看到需要修复/重写的内容。弹出窗口有自己的开发工具(请参见)。

在我的例子中,弹出窗口速度很慢,因为我使用了同步代码块,比如在数万个链接的数组上循环,正如@wOxxOm指出的,
window.localStorage
,它最终阻塞了事件循环

setInterval(//doSomething,0)
替换
for loop
,用
chrome.storage.local
替换