Das Graphenlayout ist im Allgemeinen eine komplexe Aufgabe, bei der oft
heuristische Verfahren angewendet werden, um Probleme zu lösen, die aus Rechensicht nicht so einfach
behoben werden können.
Die verschiedenen heuristischen Verfahren haben verschiedene Geschwindigkeitsmerkmale.
Kleine Graphen erfordern gewöhnlich keine Leistungsoptimierungen.
Einige Layoutalgorithmen sind für Graphen mittlerer Größe konzipiert, aber nur wenige Algorithmen sind für große Graphen
verfügbar.
Layout nur bei Bedarf verwenden
Der Graphenlayoutalgorithmus ist gewöhnlich der komplexeste und langsamste Teil Ihrer Anwendung.
Entwerfen Sie Ihre Anwendung so, dass Graphenlayout nur
sparsam und nur dann eingesetzt wird, wenn es erforderlich ist. Sie könnten beispielsweise
eine Schaltfläche einfügen, die das Layout auslöst, damit das Layout nicht ständig bei allen
Interaktionen ausgeführt wird.
Orthogonale Links ohne Linklayout verwenden
Wenn Ihre Anwendung orthogonale Linkformen erfordert,
könnten Sie versucht sein, ein Linklayout im automatischen Layoutmodus zu verwenden
(siehe setAutomaticLinkLayout). Dies führt jedoch dazu, dass das Layout bei jedem Verschieben eines Knotens
ausgelöst wird.
Wenn Sie viele Links haben, kann ein vollständig automatisches
Linklayout langsam sein.
Ein Alternativverfahren ist die Verwendung des orthogonalen Linksformtyps (siehe setShapeType). Dieser Typ stellt sicher, dass die Linkform orthogonal bleibt, ohne alle Links zu analysieren, um Linkkreuzungen und
-überschneidungen zu verringern.
Deshalb kann dieses Verfahren effizienter sein als die Ausführung des Linklayouts im Automatikmodus.
Zum Aktivieren des orthogonalen Formtyps in einem Link rufen Sie eine der folgenden Methoden auf:
link.setShapeType(ibm_ilog.diagram.LinkShapeType.Orthogonal);
link.setShapeType(ibm_ilog.diagram.LinkShapeType.OrthogonalEditable);
Richtiges Layout für die Graphengröße verwenden
Verschiedene Graphenlayoutalgorithmen unterstützen Graphen verschiedener Größen.
- Für große Graphen können das Baumstrukturlayout (TreeLayout) und das Rasterlayout (GridLayout) verwendet werden.
- Das hierarchische Layout (HierarchicalLayout) ist für Graphen mittlerer Größe geeignet, die nicht zu viele Links enthalten.
- Das Layout "ForceDirected" ist der langsamste Algorithmus und eignet sich nicht für große Graphen.
Weitere Einzelheiten finden Sie unter Geschwindigkeit von Graphenlayoutalgorithmen.
Nicht alle Links anzeigen
Wenn Sie einen großen Graphen mit Links haben, empfiehlt es sich, nur einen
Spanning Tree des Graphen anzuzeigen und die anderen Links auszublenden.
Der Spanning Tree kann mit TreeLayout angelegt werden.
Entwerfen Sie Ihre Anwendung so, dass sie Interaktionen verwendet, um den Benutzer
auf ausgeblendete Links aufmerksam zu machen.
Bei der Auswahl eines einzigen Knotens könnten beispielsweise alle Knoten
hervorgehoben werden, die von diesem Knoten aus über ausgeblendete oder sichtbare Links erreichbar sind.
Dies ist ergonomischer als die Anzeige aller Links zur gleichen Zeit.
Das Auge des Benutzers kann Links nicht verfolgen, wenn zu viele zur gleichen Zeit angezeigt werden.
In Untergraphen zusammenfassen und ausblenden
Manchmal enthalten Graphen aussagefähige Clusterinformationen.
Ein Graph von Personen kann beispielsweise auf der Basis der Nationalität
oder der Familienzugehörigkeit in Cluster aufgeteilt werden. Jeder Cluster kann als verschachtelter Untergraph
(Subgraph) dargestellt werden, der aus- und eingeblendet werden kann.
Untergraphen haben ein schnelleres Layout, wenn sie ausgeblendet sind, da es nicht erforderlich ist,
den internen Inhalt der Cluster anzulegen.
Außerdem wird das Diagramm verständlicher, wenn nur Details von Interesse
angezeigt und weniger interessante Untergraphen ausgeblendet werden.
Werden hingegen alle Untergraphen eingeblendet und ist die Verschachtelungstiefe
der Untergraphen sehr hoch, kann das Layout sehr langsam werden.
Wenn eine Anwendung große Graphen verwenden, kann ein sorgfältig konzipiertes Clustering
in verschachtelte Untergraphen die Funktionalität für den Benutzer erheblich verbessern.
Geschwindigkeit von Graphenlayoutalgorithmen
Die Geschwindigkeit der Graphenlayoutalgorithmen richtet sich nach dem Graphentyp und nach den Layoutparametern.
Einige Layouts sind für bestimmte Typen von Graphen langsam.
Baumstrukturlayout
Das Baumstrukturlayout (TreeLayout) ist schnell und eignet sich für riesige Graphen, solange
Sie keine automatischen Tip-over-Modi verwenden.
- Die Layoutmodi FREE und LEVEL sind die schnellsten.
- Die Radiallayoutmodi sind geringfügig langsamer, aber für große Graphen schnell genug.
- Die Tip-over-Layoutmodi sind langsam und sind nur für kleine Graphen wirklich geeignet.
Weitere Einzelheiten finden Sie unter Baumstrukturlayout (TL, Tree Layout).
HierarchicalLayout
Die Geschwindigkeit des hierarchischen Layouts (HierarchicalLayout) richtet sich nach der Dichte
(dem Verhältnis zwischen der Linkanzahl und der Knotenanzahl) des Graphen.
HierarchicalLayout ist für sehr große Graphen mit wenigen Links geeignet, kann aber bei
kleineren Graphen mit vielen Links langsam sein.
Die Geschwindigkeit und die Qualität von HierarchicalLayout richtet sich auch nach der Anzahl der Vorgaben.
Je weniger Vorgaben vorhanden sind, desto mehr Freiheit hat das Layout bei der Platzierung der Knoten und desto schneller ist das Layout.
Vermeiden Sie insbesondere Vorgabenkonflikte, weil diese Konflikte nur langsam erkannt werden.
Weitere Einzelheiten finden Sie unter Hierarchisches Layout (HL).
GridLayout
Das Rasterlayout (GridLayout) ist schnell und für große Graphen geeignet. Im Layoutmodus
TILE_TO_MATRIX richtet sich die Geschwindigkeit jedoch nach dem Abstand der Rasterlinien zueinander.
Je enger die Rasterlinien beieinander liegen, desto langsamer ist das Layout.
In anderen Layoutmodi hat der Abstand der Rasterlinien keinen Einfluss auf die Leistung.
Weitere Einzelheiten finden Sie unter Rasterlayout.
ShortLinkLayout und LongLinkLayout
Die Geschwindigkeit des Linklayouts richtet sich nach der Linkanzahl.
Linklayouts eignen sich für Graphen kleiner und mittlerer Größe. Wenn der Graph sehr viele
Links hat, ziehen Sie den Abschnitt Orthogonale Links ohne Linklayout verwenden zu Rate.
Bei LongLinkLayout (Layout für lange Links) richtet sich die Geschwindigkeit
nach dem Abstand der Rasterlinien zueinander.
Je enger die Rasterlinien beieinander liegen, desto langsamer ist das Layout.
Vermeiden Sie, sofern möglich, den umfassenden Suchmodus
(
LongLinkLayout.setExhaustiveSearching
), da dieser langsam ist.
Weitere Einzelheiten finden Sie unter Link-Layout (LL).
Kräftegesteuertes Layout
Dieser Algorithmus unterstützt drei optionale Modi: den inkrementellen (incremental) Modus,
den nicht inkrementellen Modus (non-incremental) und den schnellen Modus für mehrere Ebenen (fast multilevel). Der Modus "fast multilevel" ist der schnellste für Graphen mittlerer und großer Größe.
Weitere Einzelheiten zu diesen Modi finden Sie im Abschnitt Layoutmodus in der Beschreibung des
Layoutmodus für das kräftegesteuerte Layout.
Serverseitiges Layout
Bei großen oder komplexen Graphen können Sie die Leitung durch die Verwendung des serverseitigen Layouts verbessern.
Beim serverseitigen Layout werden alle Graphendaten an den Server gesendet, auf dem dann das Graphenlayout ausgeführt wird.
Diese Vorgehensweise kann schneller sein, ist aber von den folgenden Faktoren abhängig:
- Geschwindigkeit der JavaScript-Engine des Browsers,
- Geschwindigkeit der Netzverbindung zwischen Client und Server.
Schnittstellen für Layoutanpassung
Verschiedene Layoutalgorithmen unterstützen Anpassungsschnittstellen wie
INodeBoxProvider
, INodeSideFilter
oder ILinkConnectionBoxProvider
.
Wenn Sie diese Schnittstellen verwenden, springt der Layoutalgorithmus direkt in Ihren Code.
Gehen Sie bei der Implementierung dieser Schnittstellen vorsichtig vor, weil sie zu einer Beeinträchtigung der Leistung des
Layoutalgorithmus führen können.