2014-04-25 35 views
2

我正在創建一個有幾千個節點的有向圖的情況。d3js大型有力圖形服務器端模擬

正如您可能猜到的那樣,交互式模擬速度很慢,並且瀏覽器將被凍結,如其他posts中也提到的那樣。

但是,對於我來說,靜態指向性的圖形是不夠的,我仍然需要用節點之間的力來操作圖形以獲得很好的佈局。我不太在乎模擬的平滑性。我的目標是:1.瀏覽器不會被凍結; 2.我可以通過節點之間的力量將每個節點的節點從一個地方拖到另一個地方。而且,可視化節點位置的時間間隔可能會更長。

我在考慮在node.js中放置節點位置計算。許多關於在服務器端預渲染d3圖的articles,但我需要在服務器端完成所有仿真計算,並與前端用戶進行交互。所以,我可能需要註冊監聽器來在node.js中「拖動」,「縮放」,「鼠標懸停」動作。

我不確定是否有簡單的方法來做到這一點。

回答

1

如何努力,這兩個選項之一:

  1. 預渲染服務器上的力的佈局,並在客戶端,重新運行d3.layout.force()。由於節點已經鋪設完畢,它不會持續很長時間,並且不會凍結瀏覽器。那麼你註冊你需要的聽衆?

  2. 在服務器上,生成具有佈局和事件綁定的圖形,並將其附加到DOM DocumentFragment。您將此結構傳遞給客戶端的JavaScript,並將其附加到瀏覽器DOM。

+0

激活圖形時,是否可以通過客戶端進行強制計算?我可以給出一個初始位置,但是力向圖的模擬過程需要時間。 – user2149631

+0

當您給出與模擬的最終狀態相對應的初始位置時,模擬是否也需要時間? –

+0

是的,這是問題所在。該模擬適用於10,000多個對象。客戶端瀏覽器通常沒有太多資源。 – user2149631