Simulación lateral del servidor de gráficos de gran fuerza dirigida por d3js

Estoy en la situación de crear un gráfico dirigido por fuerza con un par de miles de nodos.

Como puede suponer, la simulación interactiva es lenta y el navegador se congelará, como también se menciona en otras publicaciones .

Sin embargo, el gráfico estático dirigido por la fuerza no es suficiente para mí, y todavía necesito manipular el gráfico con fuerza entre los nodos para tener un diseño agradable. No me importa mucho la suavidad de la simulación. Mi objective es: 1. el navegador no se congelará; 2. Puedo arrastrar un nodo de un lugar a otro con fuerza entre los nodos para cada tic. Y, el intervalo de tiempo para visualizar las posiciones de los nodos puede ser más largo.

Estaba pensando en poner el cálculo de posición del nodo en node.js. Muchos artículos sobre la representación previa del gráfico d3 en el lado del servidor, pero necesito que todos los cálculos de simulación se realicen en el lado del servidor, con la interacción con los usuarios front-end. Por lo tanto, probablemente necesito registrar a los oyentes para las acciones de “arrastrar”, “zoom”, “mouseover” también en node.js.

No estoy seguro de si hay una manera fácil de hacer esto.

¿Qué hay de probar una de estas dos opciones:

  1. Pre-renderice el diseño de force en el servidor, y en el lado del cliente, vuelva a ejecutar d3.layout.force (). Debido a que los nodos ya estarán dispuestos, no durarán mucho y no congelarán el navegador. ¿Entonces registras los oyentes que necesitas?

  2. En el servidor, genere el gráfico con su diseño y enlace de eventos, adjuntándolo a un DocumentFragment DOM. Usted pasa esta estructura al cliente con su javascript del lado del cliente y lo adjunta al DOM del navegador.