Javascript Schleifenoptimierung für Illustrator 2022

Von Null auf ... Javascript in Illustrator – eine kurze, einfache Einführung, Teil 03. Schleifenoptimierung

(Info:) Der dritte Artikel »Javascript Schleifenoptimierung für Illustrator 2022« erklärt Ihnen die Grundlagen rund um Schleifen, einem der wichtigen Kontrollstrukturen in jeder Programmiersprache. Auch in Adobe Illustrator werden Javascript interpretiert (ausgeführt), jedoch nicht zeitlich optimiert, wie Sie hier sehen werden. Daher ist es bei größeren Schleifen besonders wichtig, die schnellste Art zu wählen. Dieser Artikel deckt auch das Verhalten älterer Versionen von Adobe Illustrator ab.

(Tipp:) Wenn Sie noch nicht mit Javascript vertraut sind, dann lesen Sie zuerst die Artikel »Illustrator mit Javascript automatisieren« und »Javascript Variablen für Illustrator 2022«.

Inhaltsverzeichnis

Schleifen in der Programmierung

Schleifen (Wiederholungen) erlauben es, bestimmte Anweisungen wiederholt auszuführen. Dadurch wird der Quellcode (Programm in Klartext) deutlich kürzer und variabler. In jeder Programmiersprache bestehen die Kontrollstrukturen der Schleifen aus einer Abbruchbedingung, die prüft, wann die Schleife enden muss, und einen Anweisungsblock.

Vereinfacht sieht eine Schleife mit der Prüfung VOR dem Anweisungsblock so aus:

(1:) Ist die Abbruchbedingung nicht erfüllt, weiter zu (2:).

(2:) Anweisungsblock ausführen und zurück zu (1:).

(3:) Nächste Anweisung (außerhalb der Schleife).

Weil die Abbruchbedingung VOR der Anweisungsblock (2:) steht, kann es sein, dass dieser nicht ausgeführt wird oder x-mal.

Dagegen, wenn die Prüfung NACH dem Anweisungsblock steht, wird dieser mindestens einmal ausgeführt.

(A:) Anweisungsblock ausführen und weiter zu (B:).

(B:) Ist die Abbruchbedingung nicht erfüllt, zurück zu (A:).

(C:) Nächste Anweisung (außerhalb der Schleife).

In den meisten Programmiersprachen gibt es verschiedene Schleifen:

  • For-Schleife, die von einem numerischen Startwert bis zu einem Endwert durchläuft, zum Beispiel von 50 bis 70 oder als Countdown von 10 bis 0.
  • While-Schleife, die mit der Abbruchbedingung beginnt und der Anweisungsblock folgt.
  • Do-While-Schleife, die mit Anweisungsblock und mit der Abbruchbedingung endet.
    Repeat-Until folgt dem gleichen Konzept wie die Do-While-Schleife, benutzt jedoch andere Schlüsselworte.

Schleifen in Javascript

Die ersten drei Schleifen (For, While und Do-While) stehen in Javascript zur Verfügung. Damit Schleifen funktionieren können, benötigen Sie Variablen.

For-Schleife in Javascript

var vZähler = 0;
for (var i = 0; i < 10; i++) { /* Abbruchbedingung */
	vZähler = vZähler + 1; /* Anweisungsblock */
 }

Diese Schleife läuft von 0 (var i = 0) bis 9 (Abbruchbedingung 9 ist kleiner 10: i < 10) genau zehnmal durch.
(Hinweis:) Die Schreibweise i++ ist eine Abkürzung zu i = i + 1 (der Erhöhung des Wertes in i um jeweils plus 1).

While-Schleife in Javascript

var i = 0;
var vZähler = 0;
while (i < cDauer) { /* Abbruchbedingung */
	vZähler = vZähler + 1; /* Anweisungsblock */
	i++;
 }

Diese Schleife entspricht der obigen For-Schleife und läuft analog genau zehnmal durch.

Do-While-Schleife in Javascript

var i = 1;
var vZähler = 0;
do {
    vZähler = vZähler + 1; /* Anweisungsblock */
} while (i++ < cDauer); /* Abbruchbedingung */

Diese Schleife beginnt, im Gegensatz zu den beiden anderen, bereits mit i = 1, weil die Abbruchbedingung erst am Ende geprüft wird.

Verschachtelte Schleifen

Neben diesen einfachen Schleifen kann es bei der Programmierung vorkommen, das Schleifen in Schleifen ablaufen (verschachtelte Schleifen) und damit multipliziert sich die Anzahl der Schleifen-Durchgänge und damit die Laufzeit der Schleifen. Hierin oft liegt die Langsamkeit von Prozessen und Programmen. Denn auch wenn Computer immer schneller werden, sollten Schleifen stets optimiert sein und so schnell wie möglich ablaufen.

var i = 0;
var j = 0;
var vZähler = 0;
for (var i = 0; i < 10; i++) { /* 1. Abbruchbedingung */
     for (var j = 0; j < 10; j++) { /* 2. Abbruchbedingung */
        vZähler++;
    }
}

Diese Schleife läuft 10 x 10 Durchgänge, also insgesamt 100-mal durch. Diesen Wert hat am Ende auch die Variable vZähler.

Das zeitliche Verhalten der Schleifen

(Hinweis:) Ich habe die oben erwähnten drei Schleifentypen als einfache und doppelte Schleife als ganz einfaches Javascript programmiert und diese sechs Javascripts in Adobe Illustrator 2022, Adobe InDesign 2022, Adobe Photoshop 2022 und QuarkXPress 2020 laufen lassen. Dabei habe ich jeweils den aktuellen Zähler der Ticks genau vor und nach der Schleifenkonstruktion in zwei Variablen gespeichert. Die Differenz der beiden Zahlen ergibt die Laufzeit. Die Ergebnisse für Schleifenkonstruktionen, die 25.000.000 Durchläufe haben, sind recht erstaunlich. Die hohe Zahl der Durchläufe zeigt am besten die Unterschiede in den Programmen.
(Tipp:) Sie finden unten den Link zum Downloaden der sechs Javascripte und selber testen.

SchleifeIllustratorInDesignPhotoshopQuarkXPress
1x for5.935 sec.4.101 sec.4.086 sec.0.060 sec.
2x for5.713 sec.4.138 sec.4.138 sec.0.054 sec.
1x while10.782 sec.7.996 sec.7.485 sec.0.057 sec.
2x while10.447 sec.8.427 sec.7.401 sec.0.061 sec.
1x do-while8.343 sec.5.616 sec.5.768 sec.0.058 sec.
2x do-while8.198 sec.5.558 sec.5.723 sec.0.059 sec.
Vergleich der Schleifenlaufzeit in verschiedenen Programmen.

Der Illustrator hat leider den schlechtesten Javascript-Interpreter, wohin geben QuarkXPress den besten hat.

Die sechs Javascripts können Sie downloaden und mit Ihrem System selbst testen:
(Download:) Download Sechs-Schleifen-Javascript.zip (8 kByte) als (.zip) Zip-Archiv.

Fazit

Normalerweise sind While-Schleifen die schnellere Variante, was man an den Ergebnissen von QuarkXPress sieht. Jedoch in Adobe Illustrator, InDesign und Photoshop sind die For-Schleifen schneller und doch 100 bis 200 % langsamer als QuarkXPress. Lässt man die Schleifen in einem Webbrowser wie Apple Safari ablaufen, bekommt man ebenfalls ähnlich schnelle Werte wie mit QuarkXPress. Daher muss Adobe dringend an ihrem Javascript-Interpreter nachbessern.

ENDE

Jetzt sind Sie gefragt!

(FAQ:) Klicken Sie auf den Link »Kontakt«, wenn Sie eine Anregung, Ergänzung oder einen Fehler gefunden haben.

(Hinweis:) Klicken Sie auf den Link »Newsletter«, wenn Sie gerne auf dem Laufenden bleiben wollen.

(Hilfe:) Klicken Sie auf den Link »Spende«, wenn Sie die Website mit einer kleinen Zuwendung unterstützen möchten.