2016-10-13 192 views
0

我有一個典型的節點鏈接圖用於節點鏈路A良好性能算法 所述節點和所述連桿是與結構JSON對象像 節點在這種特定情況下

id: 
type:.... 

鏈接

from: (nodeid) 
to: (nodeid) 
type:.... 

我當前的實現需要提供一個nodeid時,獲取即時關係並將其寫入表(使用DataTable庫的表) 我做了以下操作:

//Building array of links that are related to that nodeid 
    function setSelectedNodeLinks(node, links) { 
    self.selectedNodeLinks = []; 
    for (var i = 0; i < links.length; ++i) { 
    if (node.id === links[i].nodeEndIdEntity ||node.id === links[i].nodeStartIdEntity) 
    self.selectedNodeLinks.push(links[i]); 
    }} 

然後

function updateEntitiesTable(selectedId) { 
    var table = $("#TableGraphEntities").DataTable(); 
    for (var i = 0; i < table.rows()[0].length; i++) { 
    var update = table.row(i).data(); 
    update._entityRelation = ""; 
    for (var r = 0; r < self.selectedNodeLinks.length; r++) { 
     if (table.row(i).data().entityId !== selectedId) { 
     if (table.row(i).data().entityId === self.selectedNodeLinks[r].nodeStartIdEntity || table.row(i).data().entityId === self.selectedNodeLinks[r].nodeEndIdEntity) { 
          update._entityRelation = self.selectedNodeLinks[r].relationType[0]; 
          break; 
         } 
        } else { 

         break; 
        } 
       } 
       //table.row(i).data(update); 
      } 
      console.log("Done building table"); 
     } 

但最終的結果,具有500個節點的情況下,是很慢(3,4-秒)。我怎樣才能優化這個?

回答

0

除了可以使用的所有優化之外,在我的情況下,我不知道使用了很多DOM訪問循環中的東西。只是簡單的改變

table.row(i).data() 

update 

將給予良好的效果。猜猜我不應該考慮不同的算法,但實際的代碼仍然是一個大混亂