Javascript chrome.contextMenus.create冻结chrome

Javascript chrome.contextMenus.create冻结chrome,javascript,google-chrome,contextmenu,Javascript,Google Chrome,Contextmenu,我正在使用事件页面!!并且需要创建带有子菜单(深树)的上下文菜单。 其深度取决于用户数据。上下文菜单的创建可能非常频繁,因为它取决于用户的操作。我可以用一些逻辑来降低这些更新的频率,但在会话过程中可能会发生几次。 问题是这些菜单的创建会使Chrome冻结一两秒。 因为我使用的是事件页面,所以必须使用chrome.contextMenus.onClicked.addListener。以前,当我使用onClick处理程序时,我没有经历过冻结(相同数量的数据)。 现在我必须把创建子菜单放在我的主上下文

我正在使用事件页面!!并且需要创建带有子菜单(深树)的上下文菜单。
其深度取决于用户数据。上下文菜单的创建可能非常频繁,因为它取决于用户的操作。我可以用一些逻辑来降低这些更新的频率,但在会话过程中可能会发生几次。
问题是这些菜单的创建会使Chrome冻结一两秒。
因为我使用的是事件页面,所以必须使用
chrome.contextMenus.onClicked.addListener
。以前,当我使用onClick处理程序时,我没有经历过冻结(相同数量的数据)。
现在我必须把创建子菜单放在我的主上下文项的回调中(还有其他方法吗?)

我就是这样做的:

function createMenu(data) {
    chrome.contextMenus.removeAll(function() {  
        chrome.contextMenus.create({
            id: "v7",
            title : "some title",
            type : "normal",
            contexts : ["editable"],
        }, function() { 
            function buildTree(NTF, parID) {
                for (var i=0, l=NTF.length; i<l; i++) {
                    var menuId = NTF[i].id;
                    var menuText = NTF[i].text;
                    chrome.contextMenus.create({
                        id: menuId,
                        parentId: parID,
                        title: menuText,
                        type: "normal",
                        contexts: ["editable"],

                    });
                    if (NTF[i].children) buildTree(NTF[i].children, menuId);
                }
            }
            buildTree(data, 'v7');      
        });
    });
}
有没有更好的方法使这项工作不冻结铬?
我的数据数组包含大约700个节点,最大深度为3层。

我在上打开了一个错误报告。问题的原因是,在事件页面中添加、修改或删除上下文菜单项时,事件页面执行相对昂贵的I/O操作(写入磁盘)

目前,唯一的解决办法是使用背景页面而不是事件页面

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    if (info.menuItemId.indexOf("id_pattern_of_my_submenu_items") > -1) {
        //do some stuff with it 
    }
});