[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

5. Mai 2011, 13:35
Beitrag # 1 von 28
Bewertung:
(7265 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe bei CS5 schon immer "gefühlt" dass es langsamer ist als CS4 bei der Ausführung von Skripten. Nun habe ich eine Testanwendung in VB6 für CS5 geschrieben.

Es wird eine Tabelle auf einer Seite mit Zahlen gefüllt. Mit CS4 braucht es 1 Minute. Mit CS5 dauert der gleiche Vorgang 3 Minuten! Aber jetzt kommt das unerklärliche: Nach der dritten Seite braucht CS5 auch nur noch 1 Minute.

Ich kann mir das nicht erklären! InDesign CS5 wird nach zwei langsam aufgebauten Seiten, ab der dritten Seite schneller. Ich weiß, das klingt unglaublich. Kann sich das jemand erklären?

Harald
X

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Marc Sidon
Beiträge gesamt: 262

5. Mai 2011, 15:16
Beitrag # 2 von 28
Beitrag ID: #470738
Bewertung:
(7245 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

erklären kann ich es mir leider auch nicht. Nur feststellen musste ich es auch bereits mehrfach.

Mache den selben Test mal, indem Du das Skript ausführst und unmittelbar danach die rechte Maustaste klickst, damit ein Kontextmenü aufgeht. Dies stoppt die Aktualisierung der GUI, d.h. Du siehst nicht mehr, was das Skript macht, aber es läuft erheblich schneller!

Es scheint also mit der GUI-Aktualisierung zusammen zu hängen. Wie man das jedoch per Skript wegbekommt, weiß ich auch nicht. Es gibt zwar ein paar Eigenschaften, die man per Skript ändern kann und die die GUI-Aktualisierung beeinflussen oder beeinflussen sollten, jedoch bringt bei mir nichts davon den gewünschten Geschwindigkeitsschub wie es das Öffnen eines Kontextmenüs tut.

Wenn Du etwas herausfindest, bin ich auch für Tips dankbar.
Und poste bitte mal Deine Ergebnisse des "RechteMaustaste-Tests"!

Gruß,
Marc


als Antwort auf: [#470723]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

5. Mai 2011, 17:21
Beitrag # 3 von 28
Beitrag ID: #470752
Bewertung:
(7227 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marc,

vielen Dank für den Tipp. Das Ergebnis bei meiner Testanwendung ist erstaunlich.

InDesign normal ausgeführt: 1:40 min
InDesign minimiert ausgeführt: 1:27 min
InDesign rechte Maustaste: 0:19 min

Das Öffnen eines Kontextmenüs beschleunigt die Ausführung eines Skriptes also wesentlich. Das Minimieren von InDesign sollte doch den gleichen Zweck haben, nämlich die Bildschirmaktualisierung stoppen. Tut es aber nicht! Das verstehe ich nicht!

Wie kann ich per Skript das gleiche erreichen? Gibt es irgendwelche Einstellungen in InDesign? Ich habe nichts gefunden! OK, ich kann einfach das Datei Menü per Skript herunterklappen. Das hat den gleichen Effekt.

Harald


als Antwort auf: [#470738]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

5. Mai 2011, 17:57
Beitrag # 4 von 28
Beitrag ID: #470755
Bewertung:
(7209 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Harald,

wenn ich das richtig sehe, arbeitest Du unter Windows.

Jetzt kommt pure Spekulation!

Das Öffnen des Kontextmenues erlaubt die Abarbeitung von Events.
Eventuell hilft es dann in Deinem Programm den Befehl DoEvents() (ich hoffe, der Befehl ist richtig, ich habe keine Ahnung von VB) einzufügen.


als Antwort auf: [#470752]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Uwe Laubender
Beiträge gesamt: 5316

5. Mai 2011, 18:50
Beitrag # 5 von 28
Beitrag ID: #470761
Bewertung:
(7197 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Harald!
Weiss nicht, ob's hilft, aber hast Du schon folgendes probiert?

Code
app.scriptPreferences.enableRedraw = false; 


MacBook Pro 2.4GHz | OS X 10.5.8 | Adobe CS3/CS4/CS5/CS5.5 Design Premium


als Antwort auf: [#470752]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Klaus79
Beiträge gesamt: 341

5. Mai 2011, 22:34
Beitrag # 6 von 28
Beitrag ID: #470767
Bewertung:
(7152 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich schieß jetzt mal ein wenig in‘s Blaue:

Unter VBA gibt es folgende Makro-beschleunigende Befehle
Application.ScreenUpdating = False
(entspricht app.scriptPreferences.enableRedraw = false;)
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Die beiden letzten Befehle müssten noch übersetzt werden.
Und am Ende nicht vergessen alles auf "true" zu setzen
(bzw. xlCalculationAutomatic ...)

Könnte evtl. das Problem lösen(?).

Gruß
Klaus


als Antwort auf: [#470761]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

6. Mai 2011, 10:23
Beitrag # 7 von 28
Beitrag ID: #470806
Bewertung:
(7113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

vielen Dank für die Tipps!

@WernerPerplies:
Richtig, ich arbeite unter Windows mit VB6. Es gibt hier ein DoEvents(), aber wo soll ich das Setzen? Das Kontextmenü wird in InDesign geöffnet und verhindert wohl die Bildschirmaktualisierung. Das Minimieren von InDesign sollte den gleichen Effekt haben, aber hat es nicht!

@Uwe Laubender:
Diesen Tipp hatte ich auch mehrmals gelesen. Diese Einstellung hat aber keine positive Auswirkung.

@Klaus79:
Das sind Excel-Befehle, oder? Die entsprechenden Befehle in InDesign habe ich alle schon erfolglos probiert.

Wie kann ich per Skript-Einstellung, diesen Effekt "Menü öffnen - RedrawOff" erreichen?

Harald


als Antwort auf: [#470755]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

6. Mai 2011, 10:38
Beitrag # 8 von 28
Beitrag ID: #470809
Bewertung:
(7108 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

ich kenne Dein Skript nicht, üblicherweise setzt man solch einen Befehl in vorhandene Schleifen, in denen ein Update über Events ermöglich werden soll.

Bei nochmaligem Nachdenken komme ich aber zu dem Schluss, dass es vermutlich nicht klappen wird, weil vermutlich Dein VB6-Programm in einem anderen Thread als InDesign läuft.

Aber Probieren geht halt über studieren.

Falls es nicht klappt, müsstest Du Dir irgendeinen InDesign-Befehl suchen, der die Abarbeitung von Events erlaubt.

Dies sind in der Regel nicht modale Windows, also Fenster, die eine Benutzereingabe erlauben, ohne dass der Programmablauf unterbrochen wird.

Wir hatten vor kurzen eine ähnliches Thema hier, und da schien mir der z. B. der Befehl var dummy = myFrame.contents; das gewünschte Verhalten auszulösen.

Siehe auch:
http://www.hilfdirselbst.ch/..._P469910.html#469910

Solch ein Befehl funktioniert natürlich nur im richtigen Kontext.

Ach ja:
Das Kontextmenü wird in InDesign geöffnet und verhindert wohl die Bildschirmaktualisierung.
Nein, das ist meines Erachtens nicht der Punkt, sondern ein Kontextmenue erlaubt Benutzerinteraktion, dass heißt, das Programm wartet auf Benutzereingaben (Klick-Events).


als Antwort auf: [#470806]
(Dieser Beitrag wurde von WernerPerplies am 6. Mai 2011, 10:45 geändert)

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

6. Mai 2011, 23:39
Beitrag # 9 von 28
Beitrag ID: #470852
Bewertung:
(7063 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

stimmt es wird nicht klappen, weil mein VB6 Programm in einem anderen Thread läuft. Ich denke der Geschwindigkeitsvorteil kommt nicht daher, weil die Abarbeitung von Events durch das Öffnen eines Menüs durchgeführt wird.

Durch das Öffnen eines nicht modalen Fensters (hier Menü) wird die Bildschirmaktualisierung verhindert. Und daher läuft InDesign schneller! Dass InDesign auf eine Benutzereingabe wartet ist ja eher negativ.

Was ich absolut nicht verstehe: Wenn ich InDesign minimiere, so ist ja auch keine Bildschirmaktualisierung notwendig. Und trotzdem ist InDesign langsamer als beim geöffneten Menü. Das ist unlogisch!

Harald


als Antwort auf: [#470809]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

7. Mai 2011, 06:40
Beitrag # 10 von 28
Beitrag ID: #470855
Bewertung:
(7042 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

stimmt es wird nicht klappen, weil mein VB6 Programm in einem anderen Thread läuft.

Du solltest trotzdem mal versuchen, dass schadet ja nicht.

Ich denke der Geschwindigkeitsvorteil kommt nicht daher, weil die Abarbeitung von Events durch das Öffnen eines Menüs durchgeführt wird.

;-) Da denken wir halt unterschiedlich, für mich ist das sonnenklar!

Durch das Öffnen eines nicht modalen Fensters (hier Menü) wird die Bildschirmaktualisierung verhindert. Und daher läuft InDesign schneller!

Vergiss in diesem Fall die Bildschirmaktualisierung, sie ist nicht Dein Problem, sonst würde die Einstellung
app.scriptPreferences.enableRedraw = false;
helfen!

Dass InDesign auf eine Benutzereingabe wartet ist ja eher negativ.

Nein, Warten in einem Event-Driven-System bedeutet nichts anderes als Abarbeiten anstehender Events!

Allerdings können Betriebssystem und Anwendungsprommierer (eingeschränkt) bestimmen, welche Events abgearbeitet werden.

Und deswegen erlauben nicht modale Fenster in der Regel die Abarbeitungs aller Events, aber bei Menues mindestens die Abarbeitung des Click-Events!

Was ich absolut nicht verstehe: Wenn ich InDesign minimiere, so ist ja auch keine Bildschirmaktualisierung notwendig.

s. meine bisherigen Ausführungen.

Und trotzdem ist InDesign langsamer als beim geöffneten Menü. Das ist unlogisch!

Nein völlig logisch, deswegen habe ich ja meinen Vorschlag gemacht.

Ich habe ein wenig nachgeforscht, ein Lösungsansatz wäre ein DoEvents in JavaScript, diese Methode gibt es wohl per Design nicht.

Alternativ könnte es klappen, einen TimeOut einzubauen, so etwas scheint aber InDesign nicht zu kennen.

Eventuell könnte noch ein Sleep(ganz kurz) klappen, aber wichtig, wenn das klappen soll, muss es ein Sleep von InDesign sein:
Evntuell wäre das mit application.doScript("sleep(10)") zu realisieren, die genaue Syntax müsstest Du noch prüfen.

Für mich stellt sich noch die Frage, ab es sich um ein ausschließliches Windowsproblem handelt, oder ob sich die kritische Situation auch mit einem reinen JavaScript-Programm nachstellen lässt.

Könntest Du mir vielleicht eine funktionierende Testsituation zur Verfügung stellen?

Wenn ich es richtig verstanden habe, kennt InDesign seit CS5 eine Hintergrundverarbeitung, und die Einführung könnte die Ursache für das Zeitverhalten sein.

Aus meiner Sicht ist dies Verhalten ein Bug!


als Antwort auf: [#470852]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

7. Mai 2011, 16:01
Beitrag # 11 von 28
Beitrag ID: #470866
Bewertung:
(7005 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

Du hast mich (fast) überzeugt. Wenn die Hintergrundverarbeitung in CS5 wirklich eingeführt wurde und dieses Verhalten zeigt, dann ist es ein Bug.

Ich werde am Montag noch einige Tests machen.

Harald


als Antwort auf: [#470855]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

9. Mai 2011, 15:23
Beitrag # 12 von 28
Beitrag ID: #470978
Bewertung:
(6939 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ich habe einige Tests gemacht. Ein Sleep() mit verschiedenen Zeiten habe ich probiert. Leider erfolglos!

Eine Testumgebung ist schnell gemacht. Ziehe dir eine Tabelle mit 20 Spalten auf dein aktives Dokument und schreibe folgenden Code um 50 Zeilen zu generieren:

Set t = tfc.Tables.Item(1)
t.BodyRowCount = 50
For r = 1 To t.BodyRowCount + 1
For c = 1 To t.Columns.Count
strci = c & ":" & r
t.Cells(strci).Texts(1).Contents = strci
Next c
i = gInDApp.DoScript(...\JavaScript\sleep.jsx", idJavascript)
Next r

Der Code wird schneller abgearbeitet, wenn Du ein Menü öffnest. Was muss ich an diesem Code ändern, damit er genauso schnell ist, ohne das Menü zu öffnen?

Harald


als Antwort auf: [#470855]
(Dieser Beitrag wurde von Harald Zwer am 9. Mai 2011, 15:25 geändert)

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

9. Mai 2011, 15:56
Beitrag # 13 von 28
Beitrag ID: #470986
Bewertung:
(6929 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

Eine Testumgebung ist schnell gemacht.

;-) leider nicht für mich, da ich weder mit Javascript noch mit VB arbeite, müsste ich jetzt zuerst einmal Dein Programmsnippet von VB nach Javascript übersetzen, dann das Zeitverhalten unter Javascript testen und anschließend, wenn sich das Problem nicht mit dem reinen Javascriptcode reproduzieren lässt, auch noch nach C# übersetzen.

Mein Ehrgeiz hält sich da etwas in Grenzen.

Aber gut, jetzt mal für den Anfang:

Set t = tfc.Tables.Item(1) speichert ja wohl die Tabelle, aber was ist tfc?

Was muss ich genau machen, um an tfc zu kommen?


als Antwort auf: [#470978]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

9. Mai 2011, 16:18
Beitrag # 14 von 28
Beitrag ID: #470993
Bewertung:
(6917 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ich kopiere mir für jeden Testlauf die erste Seite mit der Tabelle, die ich von Hand erstellt habe

Set gIndDoc = gInDApp.ActiveDocument

Set fp = gIndDoc.Pages.Item(1)
Set tf = fp.TextFrames.Item(1)

Set p = gIndDoc.Pages.Add(idAtEnd)
Set tfc = tf.Duplicate
tfc.Move p

Set t = tfc.Tables.Item(1)
t.BodyRowCount = 50
For r = 1 To t.BodyRowCount + 1
For c = 1 To t.Columns.Count
strci = c & ":" & r
t.Cells(strci).Texts(1).Contents = strci
Next c
i = gInDApp.DoScript("...\sleep.jsx", idJavascript)
Next r

Harald


als Antwort auf: [#470986]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

9. Mai 2011, 17:23
Beitrag # 15 von 28
Beitrag ID: #470999
Bewertung:
(6906 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

ich habe jetzt mal versucht, Deinen Code nach JavaScript zu übertragen:

Code
var table = app.activeDocument.stories[0].tables[0]; 
table.bodyRowCount = 50;
for(var r=0;r<table.bodyRowCount ;r++)
{
for(var c=0;c<table.columns.length;c++)
{
table.rows[r].cells[c].contents = (c+1)+";"+(r+1)
}
}
alert("fertig!")

Das Script läuft m. Erachtens sehr flott (für InDesign!) durch, allerdings braucht Indesign dann eine ganze Weile, bis das Ergebnis angezeigt wird.

Wenn ich während dieser Zeit versuche, ein Contextmenue aufzumachen, dauert das auch eine Weile.

Das offene Menue bringt meines Erachtens nach keinen Zeitvorteil.

Außerdem erhalte ich bei meinen Defaultwerten reichlich Übersatz.

Ich kann also mit JavaScript die Situation nicht nachstellen.


als Antwort auf: [#470993]
X