JavaScript:JointJS中的智能路由(性能问题?)

JavaScript:JointJS中的智能路由(性能问题?),javascript,jointjs,Javascript,Jointjs,我一直在看JointJS路由演示( ),我设法将其应用于我的web应用程序中。该示例在2个元素之间只有一个链接,只有3个障碍,而在我的应用程序中,我有大约50个元素(可以同时是源、目标和障碍),它们之间有80多个链接 我有一个页面上所有元素的列表:listofements,以及它们之间所有链接的列表:listOfLinks 按照上面JointJS.com链接的逻辑,我将执行以下操作: graph.on('change:position', function(cell) { // have

我一直在看JointJS路由演示( ),我设法将其应用于我的web应用程序中。该示例在2个元素之间只有一个链接,只有3个障碍,而在我的应用程序中,我有大约50个元素(可以同时是源、目标和障碍),它们之间有80多个链接

我有一个页面上所有元素的列表:listofements,以及它们之间所有链接的列表:listOfLinks

按照上面JointJS.com链接的逻辑,我将执行以下操作:

graph.on('change:position', function(cell) {
    // have any elements been moved? Then reroute all of the links.
    for(var j = 0; j < listOfLinks.length; ++j) {
       if (_.contains(listOfElements, cell)) paper.findViewByModel(listOfLinks).update();
    }
}); 
graph.on('change:position',函数(单元格){
//是否移动了任何元素?然后重新路由所有链接。
对于(var j=0;j
上面的这类方法确实有效,但当我拖动元素时,会对性能产生巨大影响,因为每当我移动元素时,都会检查每个链接

  • 有没有一种有效的方法来检查JointJS中链接和元素的冲突?我一直在四处寻找,但似乎找不到关于这件事的任何信息

  • 我真的在做一些自杀性的表演吗?有没有办法加快速度

  • 除了JointJS之外,我还愿意接受关于智能路由的其他建议。我也尝试过jsPlumb,但没有成功。任何帮助都将不胜感激


    提前谢谢,伙计们,继续努力吧

    我只是简单地看了一下这个示例,但是您迭代listOfLinks.length次,每次都发送所有链接,这看起来确实很奇怪

    那么:

    graph.on('change:position', function(cell) {
        if (_.contains(listOfElements, cell)) {
            for (var i=0; i<listOfLinks.length; i++) {
                paper.findViewByModel(listOfLinks[i]).update();
            }
        }
    });
    
    graph.on('change:position',函数(单元格){
    if(uu.contains(元素列表,单元格)){
    对于(var i=0;i rect2.right | |
    rect1.bottomrect2.bottom);
    }
    图.on('change:position',函数(单元格){
    if(uu.contains(元素列表,单元格)){
    var bbox=paper.findViewByModel(单元格);
    _.每个(链接列表、功能(链接){
    var linkView=paper.findViewByModel(link);
    if(重叠(linkView.getBBox(),bbox)){
    linkView.update();
    }
    });
    }
    });
    
    function overlap(rect1, rect2) {
        return !(rect1.right < rect2.left || 
                 rect1.left > rect2.right || 
                 rect1.bottom < rect2.top || 
                 rect1.top > rect2.bottom);
    }
    
    graph.on('change:position', function(cell) {
        if (_.contains(listOfElements, cell)) {
            var bbox = paper.findViewByModel(cell);
            _.each(listOfLinks, function(link) {
                var linkView = paper.findViewByModel(link);
                if (overlap(linkView.getBBox(), bbox)) {
                    linkView.update();
                }
            });
        }
    });