Otimizações do Layout de Gráfico

Em geral, o layout de gráfico é uma tarefa complexa que muitas vezes usa heurística para resolver problemas NP completo (problemas que não podem ser facilmente resolvidos de um ponto de vista computacional). Heurísticas diferentes possuem diferentes características de velocidade. Gráficos pequenos geralmente não requerem otimizações de desempenho. Alguns algoritmos de layout foram projetados para gráficos de tamanho médio, mas apenas alguns algoritmos estão disponíveis para gráficos grandes.

Usar o Layout Apenas Quando Necessário

O algoritmo de layout de gráfico geralmente é a parte mais complexa e mais lenta de seu aplicativo. Projete seus aplicativos para usarem o layout de gráfico com moderação e apenas quando necessário. Por exemplo, é possível incluir um botão que aciona o layout, para que o layout não precise ser executado continuamente durante todas as interações.

Usar Links Ortogonais sem o Layout de Link

Se seu aplicativo precisar de formas de links ortogonais, talvez você queira usar um layout de link no modo de layout automático (consulte setAutomaticLinkLayout). However, this mode causes the layout to be triggered whenever a node moves. If you have many links, a full automatic link layout can be slow. Um método alternativo é usar o tipo de forma ortogonal de link (consulte setShapeType). Este tipo assegura que a forma do link permaneça ortogonal, sem analisar todos os links para reduzir cruzamentos de links e sobreposições. Portanto, isto pode ser mais eficiente do que executar o layout de link em modo automático.
To enable the orthogonal shape type on a link, issue one of the following calls:
  • link.setShapeType(ibm_ilog.diagram.LinkShapeType.Orthogonal);
  • link.setShapeType(ibm_ilog.diagram.LinkShapeType.OrthogonalEditable);

Usar o Layout Apropriado para o Tamanho do Gráfico

Algoritmos de layout de gráfico diferentes suportam gráficos de tamanhos diferentes.
  • O Layout de Árvore e o Layout de Grade podem manipular gráficos grandes.
  • O Layout Hierárquico pode manipular gráficos de tamanho médio que não possuem muitos links.
  • O Layout Direcionado por Força é o algoritmo mais lento e não é apropriado para gráficos grandes.

Não Mostrar Todos os Links

Se você possuir um gráfico grande com links, é melhor mostrar apenas uma árvore de ampliação do gráfico e ocultar os outros links. A árvore de ampliação pode ser organizada com o Layout de Árvore.
Projete seu aplicativo para usar interações para tornar o usuário ciente de links ocultos. For example, selecting one node might highlight all nodes that are reachable from this node through hidden or visible links. It is more ergonomic than displaying all the links at the same time. The user's eyes cannot trace links if too many are displayed at the same time.

Armazenar em Cluster em Subgráficos e Reduzir

Às vezes os gráficos possuem informações de cluster significativas. Por exemplo, um gráfico de pessoas pode ser armazenado em cluster de acordo com a nacionalidade ou de acordo com as famílias. Cada cluster pode ser representado como um subgráfico aninhado (Subgraph) que pode ser reduzido ou expandido.
Os subgráficos possuem um layout mais rápido quando são reduzidos, pois não é necessário organizar o conteúdo interno dos clusters. O diagrama também se tornará mais compreensível se forem mostrados apenas detalhes de interesse, enquanto os subgráficos menos interessantes são reduzidos. Conversely, if all subgraphs are expanded, when the nesting depth of the subgraphs is high, the layout can become slow. When an application uses large graphs, a carefully designed clustering into nested subgraphs can help to improve user experience.

Velocidade de Algoritmos de Layout de Gráfico

A velocidade dos algoritmos de layout de gráfico depende do tipo de gráfico e dos parâmetros de layout. Some layouts are slow for specific types of graphs.

Layout de Árvore

O Layout de Árvore é rápido e pode manipular gráficos grandes, desde que você não use modos invertidos automáticos.
  • Os modos de layout LIVRE e de NÍVEL são os mais rápidos.
  • The radial layout modes are slightly slower, but still fast enough for large graphs.
  • Os modos de layout invertidos são lentos e funcionam melhor apenas para gráficos pequenos.
Para obter detalhes, consulte Layout de Árvore (TL).

Layout Hierárquico

A velocidade do Layout Hierárquico depende da densidade (a proporção entre o número de links e o número de nós) do gráfico. Hierarchical Layout can handle large graphs that have few links, but can be slow for smaller graphs that have many links.
A velocidade e qualidade do Layout Hierárquico também dependem do número de restrições. Quanto menos restrições, maior a liberdade do layout para posicionar nós e mais rápido esse layout será. In particular, avoid constraint conflicts, because detecting these conflicts is slow.
Para obter detalhes, consulte Layout Hierárquico (HL).

Layout de Grade

O Layout de Grade é rápido e pode manipular gráficos grandes. No entanto, no modo de layout TILE_TO_MATRIX, a velocidade depende do tamanho da malha da grade (a distância entre as linhas de grade). Quanto menor o tamanho da malha da grade, mais lento será o layout. Em outros modos de layout, o tamanho da malha da grade não tem influência no desempenho.
Para obter detalhes, consulte Layout de Grade (GL).

Layout de Link Curto e Longo

A velocidade do layout de Link depende do número de links. Os Layouts de link são apropriados para gráficos de tamanhos pequeno e médio. Se o gráfico tiver muitos links, consulte Usar Links Ortogonais sem o Layout de Link.
Para o Layout de Link Longo, a velocidade depende do tamanho da malha da grade (a distância entre linhas de grade). Quanto menor o tamanho da malha da grade, mais lento será o layout. If possible, avoid the exhaustive search mode (LongLinkLayout.setExhaustiveSearching), because it is slow.
Para obter detalhes, consulte Layout de Link (LL).

Layout Direcionado por Força

Este algoritmo fornece três modos opcionais: incremental, não incremental e multinível rápido. O último é mais rápido para gráficos médios e grandes.
Para obter detalhes adicionais sobre estes modos, consulte Modo de Layout para o modo de layout do Layout Direcionado por Força.

Layout do Lado do Servidor

Para gráficos grandes ou complexos, é possível melhorar o desempenho usando o Layout do lado do Servidor. Server-side layout sends all the graph data to the server and performs the graph layout on the server. It can be faster depending on:
  1. The speed of the JavaScript engine of your browser.
  2. A velocidade da conexão de rede entre o cliente e o servidor.

Interfaces de Customização de Layout

Vários algoritmos de layout suportam interfaces de customização, como INodeBoxProvider, INodeSideFilter ou ILinkConnectionBoxProvider. Ao usar estas interfaces, o algoritmo de layout vai diretamente para o seu código. Use care when implementing these interfaces, because they can lead to decreased performance of the layout algorithm.