[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

WernerPerplies
Beiträge gesamt: 2762

10. Mai 2011, 16:35
Beitrag # 16 von 28
Beitrag ID: #471100
Bewertung:
(4931 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

ich habe mir jetzt noch die Mühe gemacht, Dein Script nach C# zu übertragen.

Damit erfolgt die Ansteuerung wie bei VB über COM(OLE)-Automation.

Dann habe ich das Skript viele Male sowohl mit CS4 als auch mit CS5 laufen lassen.

Das Zeitverhalten ist bei mir für beide Versionen identisch, aber aus meiner Sicht total indiskutabel.

Bei mir laufen beide Versionen in virtuellen Maschinen, CS4 unter Windows7 32Bit-Ultimate N,
CS5 Windows XP-Prof 32Bit

Arbeitsspeicher jeweils 2 GByte.

Da auf dem Rechner auch andere Tasks laufen, ist die absolute Laufzeit wenig signifikant, aber die Tendenz besagt schon einiges.

Zeitbedarf für Deine Aufgabe: 30 - 250 Sekunden!

Dabei scheint der Zeitbedarf mit jedem Programmlauf anzuwachsen.

Kontextmenue:

Wenn ich das Kontextmenue auf der InDesign-Seite öffne, hält der Programmlauf an, bis das Menue wieder geschlossen ist.

Also ein ganz anderes Verhalten als bei Dir.

Auch das JavaScript-Skript verhält sich komplett anders:
1. Viel schneller
2. Während in der COM-Anwendung die Inhalte der einzelnen Zellen einzeln hereinkleckern werden mit dem JavaScript-Skript die Daten in zwei großen Blöcken reingeschrieben.


als Antwort auf: [#470993]
X

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Marc Sidon
Beiträge gesamt: 262

10. Mai 2011, 17:08
Beitrag # 17 von 28
Beitrag ID: #471108
Bewertung:
(4923 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

also ich habe (wie bereits geschrieben) die selben Laufzeitschwankungen festgestellt. Auch ich arbeite hier sowohl via COM (in Delphi) als auch über Javascript direkt.

Bei mir beschleunigt das Öffnen des Menüs signifikant das Ausführen des Skriptes. Sowohl in Javascript als auch bei COM. Es läuft also bei mir auch in COM weiter, wenn ein Menü geöffnet ist. Lediglich das Öffnen eines modalen Fensters unterbricht die COM Generierung.

Vor allem eben beim Befüllen von Tabellen ist mir das aufgefallen. Das Erzeugen, Verschieben und Beschreiben von Textframes hingegen, geschieht (zumindest subjektiv) ähnlich schnell wie in CS3/Cs4.

Zitat 2. Während in der COM-Anwendung die Inhalte der einzelnen Zellen einzeln hereinkleckern werden mit dem JavaScript-Skript die Daten in zwei großen Blöcken reingeschrieben.


Dies sieht aber doch danach aus, dass bei Dir die Aktualisierungseinstellungen der GUI greifen. Welche hast Du denn da genau gesetzt?

Gruß,
Marc


als Antwort auf: [#471100]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

10. Mai 2011, 17:28
Beitrag # 18 von 28
Beitrag ID: #471111
Bewertung:
(4918 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marc,

Bei mir beschleunigt das Öffnen des Menüs signifikant das Ausführen des Skriptes

Was für ein Menue, vielleicht rufe ich das falsche auf?

Zitat Zitat 2. Während in der COM-Anwendung die Inhalte der einzelnen Zellen einzeln hereinkleckern werden mit dem JavaScript-Skript die Daten in zwei großen Blöcken reingeschrieben.


Dies sieht aber doch danach aus, dass bei Dir die Aktualisierungseinstellungen der GUI greifen. Welche hast Du denn da genau gesetzt?


Ja, sieht so aus, aaaaber:
ich verwende genau die gleichen Einstellungen wie beim JavaScript-Skript, aber da wird das Skript komplett abgearbeitet, ohne das etwas in InDesign zu sehen ist, dann gibt's zwei Window-Updates und die ganze Tabelle ist da!

Eventuell würde es helfen, solch kritische Bereich mit DoScript() zu übergeben, aber das ist mir noch nicht gelungen.

Ich persönlich würde die Tabellen in einer IDML-Datei erstellen, da ist der Geschwindigkeitsfaktor 100 durchaus drin.


als Antwort auf: [#471108]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

10. Mai 2011, 17:57
Beitrag # 19 von 28
Beitrag ID: #471112
Bewertung:
(4912 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marc,

mir ist es jetzt gelungen, die ganze Routine als DoScript() zu übergeben.
Als Ergebnis habe ich meine bisherige schnellste Zeit erzielt:
3,73 Sekunden für 1000 Zellen.

COM frisst hier jede Menge Zeit.

Nur das debuggen ist etwas schwierig! ;-)


als Antwort auf: [#471108]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Harald Zwer
Beiträge gesamt: 306

10. Mai 2011, 17:57
Beitrag # 20 von 28
Beitrag ID: #471113
Bewertung:
(4912 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

erst Mal vielen Dank für deine Mühe. Ich habe dein Javascript auch bei mir Laufen lassen. Die Geschwindigkeit ist bei mir ca. 10 Sekunden. Der Bildschirm wird Zeile für Zeile aufgebaut. Das entspricht in etwa meinem VB6 Programm.

Wenn ich die "Aktualisierung aktivieren" ausschalte, dann braucht Javascript noch 2 Sekunden.

@Marc:
VB6 über COM verhält sich wohl wie Delphi.

Harald


als Antwort auf: [#470999]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

10. Mai 2011, 18:05
Beitrag # 21 von 28
Beitrag ID: #471115
Bewertung:
(4910 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

Ich habe dein Javascript auch bei mir Laufen lassen. Die Geschwindigkeit ist bei mir ca. 10 Sekunden. Der Bildschirm wird Zeile für Zeile aufgebaut. Das entspricht in etwa meinem VB6 Programm.

Du meinst gleich schnell?

Da würde ich denn gerne wissen, was bei mir passirt.


als Antwort auf: [#471113]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

10. Mai 2011, 21:39
Beitrag # 22 von 28
Beitrag ID: #471123
Bewertung:
(4868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Harald,

ich habe noch ein wenig gesucht und analysiert:

Zuerst einmal:

Für das Problem Beschleunigung durch Menue habe ich keine Idee, weil hier das nicht nachstellen kann.

Hier warte ich immer noch auf die Info, welches Menue Ihr aufruft.

Aber ich habe etwas anderes entdeckt:

Eigentlich eine Binsenweisheit, aber konsequent angewendet, bringt es eine gewisse Geschindigkeit:

Jeder Aufruf eine Com-Objekts kostet viel Zeit, Du musst also unnötige Aufrufe meiden.

Deshalb einige Vorschläge:

Dein Code:
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

1. Optimierungsvorschlag (korrigiere eventuelle Syntaxfehler)
-> reduziert, falls ich mich nicht verrechnet habe um 1000 COM-Aufrufe
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)
Set rows = 50
set columns = 20

t.BodyRowCount = rows
For r = 1 To rows + 1
For c = 1 To columns
strci = c & ":" & r
t.Cells(strci).Texts(1).Contents = strci
Next c
Next r

2. Optimierungsvorschlag

set js = komplettes JavaScript // als String oder als Dateiinhalt
i = gInDApp.DoScript(js, idJavascript)




als Antwort auf: [#470993]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Marc Sidon
Beiträge gesamt: 262

11. Mai 2011, 10:04
Beitrag # 23 von 28
Beitrag ID: #471150
Bewertung:
(4818 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ WernerPerplies ] Bei mir beschleunigt das Öffnen des Menüs signifikant das Ausführen des Skriptes

Was für ein Menue, vielleicht rufe ich das falsche auf?


Naja, eben irgendwo auf der Montagefläche die rechte Maustaste drücken. Dieses Kontextmenü reicht bei mir völlig aus und alles geht "ratzfatz". :)

Antwort auf [ WernerPerplies ] Ich persönlich würde die Tabellen in einer IDML-Datei erstellen, da ist der Geschwindigkeitsfaktor 100 durchaus drin.


Muss man die IDML-Dateien tatsächlich physikalisch erzeugen und dann in InDesign platzieren? Ich habe noch nie etwas mit IDML gemacht. Könntest Du mir / uns da ein kleines Demoskript zeigen, wie Du z.B. eine solche Tabelle erstellen und platzieren würdest? Da wäre ich Dir unheimlich dankbar...

Antwort auf [ Harald Zwer ] Wenn ich die "Aktualisierung aktivieren" ausschalte, dann braucht Javascript noch 2 Sekunden.


Was meinst Du damit? Was schaltest Du da wo aus?
Wenn Du mit "app.scriptPreferences.enableRedraw = false;" ?

So etwas gibt es für COM gar nicht, oder?

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


Oder könnte man das via COM nutzen? Hmmm...

Antwort auf [ Harald Zwer ] @Marc:
VB6 über COM verhält sich wohl wie Delphi.


Das ist klar... nutzt ja beides COM / OLE.

Gruß,
Marc


als Antwort auf: [#471123]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

11. Mai 2011, 10:51
Beitrag # 24 von 28
Beitrag ID: #471156
Bewertung:
(4813 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Marc,

Naja, eben irgendwo auf der Montagefläche die rechte Maustaste drücken. Dieses Kontextmenü reicht bei mir völlig aus und alles geht "ratzfatz". :)

Das hat sich inzwischen geklärt:

Wärend des offenen Menues läuft das Skript weiter, aber der Bildschirm wird nicht upgedatet.

Die Geschwindigkeit ist merklich höher.

Ein Lösungsansatz wäre also, bei Skriptstart ein Menu zu öffnen, und anschließend wieder zu schließen.

Das wäre durchaus möglich, aber ob's den Aufwand lohnt?

Ich habe ein wenig weiter recherchiert und die Info gefunden, dass das Problem nicht nur bei InDesign existiert. Als Verursacher wird das Hyperthreading moderner Ptozessoren genannt.

Offensichtlich sind die notwendigen Programmanpassungen noch nicht perfekt.

Ein Abschalten (nur wie, und ist das sinnvoll?) soll den Effekt umgehen.

Muss man die IDML-Dateien tatsächlich physikalisch erzeugen und dann in InDesign platzieren? Ich habe noch nie etwas mit IDML gemacht. Könntest Du mir / uns da ein kleines Demoskript zeigen, wie Du z.B. eine solche Tabelle erstellen und platzieren würdest? Da wäre ich Dir unheimlich dankbar...

Eine Demo wäre mir doch etwas zu aufwändig, aber mache mal folgendes:

Für den Anfang:
Erzeuge Dir eine Tabelle, exportiere die InDesign-Datei nach IDML, entpacke die IDML-Datei, schaue ins Stories-Verzeichnis, suche die Story, die die Tabelle enthält, der Rest sollte sich aus der Analyse der Datei ergeben.

Ich benutze so etwas als Vorlage und ändere die Dinge, die ich benötige.

Screenshots für einen ersten Überblick:
http://www.weepee.de/...kerStructureFile.png
http://www.weepee.de/...tructureTableRow.png
http://www.weepee.de/...ctureTableColumn.png
http://www.weepee.de/...ructureTableCell.png
http://www.weepee.de/...ureTablePartOfIE.png


als Antwort auf: [#471150]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Marc Sidon
Beiträge gesamt: 262

11. Mai 2011, 11:27
Beitrag # 25 von 28
Beitrag ID: #471168
Bewertung:
(4800 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

schonmal vielen Dank für Deine Ausführungen. Werde mich bei Gelegenheit tatsächlich mal damit befassen (müssen)...

Aber nochmal zur Vorgehensweise:
Du erstellst diese XML-Strukturen programmatisch und speicherst sie dann als XML-Datei auf der Festplatte. Habe ich das richtig verstanden? Und was passiert dann? Muss man die gesamten Dateien, die in der IDML-ZIP enthalten sind auch erstellen? und nachher alles zippen?

Eine IDML-Datei ist doch ein komplettes Dokument, oder!?
Wie kann ich das dann, wenn man jetzt von unserem Beispiel mit einer Tabelle ausgeht, in einem vorhandenen InDesign-Dokument platzieren? Oder muß man immer das gesamte IDML-Dokument komplett erzeugen?

Ich habe eben festgestellt, dass zumindest seit CS4 die Snippets auch als XML-Struktur gespeichert werden. Ist das auch IDML und könnte man es vielleicht darüber realisieren?

Meine Idee ist folgende: ich muss immer wieder Tabellen erzeugen, mit Inhalten und Formaten befüllen und sie anschliessend dynamisch in ihrer Größe anpassen. D.h. jede Spalte, jede Zelle kann sich in Abhängigkeit von Einstellungen verbreitern verschmälern, was wiederum die Höhe der Tabelle beeinflusst, Seitenumbrüche hervorruft usw.

Die Erzeugung der Initial-Tabelle und das Schreiben von Texten und Formaten könnte ich mir also als IDML / XML vorstellen. Der zweite Schritt, die Größenanpassungen jedoch muss ich in InDesign selber machen, da ja nur dort die ganzen "realen Größen" im Zugriff sind.

Gruß,
Marc


als Antwort auf: [#471156]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

11. Mai 2011, 14:25
Beitrag # 26 von 28
Beitrag ID: #471193
Bewertung:
(4779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Marc,

Zitat Werde mich bei Gelegenheit tatsächlich mal damit befassen (müssen)...


Da Müssen würde ich nicht zu hoch bewerten, Du musst nicht, hast aber, wenn Du es machst, den Riesenvorteil, Dich ausschließlich in XML-Dateien bewege zu müssen, und das bedeutet, tolle Werkzeuge, tolle Libraries, die gewohnte Entwicklungsumgebung und eine tolle Geschwindigkeit.

Zitat Eine IDML-Datei ist doch ein komplettes Dokument, oder!?


Ja, bis auf die externen Dateien, und Adobes Bugs ;-), aber wer hat keine.

Zitat Wie kann ich das dann, wenn man jetzt von unserem Beispiel mit einer Tabelle ausgeht, in einem vorhandenen InDesign-Dokument platzieren?


Unter der Annahme, dass Du einen Text in Folgerahmen auf allen Seiten positionieren willst, musst Du nur eine Story bearbeiten und die geänderte Story mit gleichem Namen am alten Platz abspeichern, dann die Datei wieder verpacken und in InDesign wieder öffnen.

Komplizierter wird es, wenn Du viele einzelne Rahmen mit separaten Texten hast, dann musst Du Eintragungen in mehreren Dateien vornehmen:

http://www.weepee.de/...e/StoryInStories.png
http://www.weepee.de/...StoryInStoryList.pnghttp://www.weepee.de/...StoryInDesignMap.png
http://www.weepee.de/...StoryInTextFrame.png
http://www.weepee.de/...StoryInStoryFile.png

Man kann zwar relativ leicht komplette Dateien erzeugen, aber ich verwende lieber vorhandene als Templates.

Zitat Ich habe eben festgestellt, dass zumindest seit CS4 die Snippets auch als XML-Struktur gespeichert werden. Ist das auch IDML und könnte man es vielleicht darüber realisieren?


Ich habe mich damit noch nicht näher beschäftigt, aber ich meine gesehen zu haben, das es ein anderer Dialekt ist.

Zitat Meine Idee ist folgende: ich muss immer wieder Tabellen erzeugen, mit Inhalten und Formaten befüllen


Dieser Teil sollte sich problemlos mit IDML realisieren lassen.

Zitat jede Zelle kann sich in Abhängigkeit von Einstellungen verbreitern verschmälern


Ist das wirklich so? Oder bestimmt nicht die breiteste Zelle in einer Spalte oder die höchste Zelle in einer Zeile die Breite der Spalte oder die Höhe der ganzen Zeile?

Damit müsste es doch möglich sein, genau diese Zellen außerhalb von InDesign zu ermitteln und dann die entsprechenden Stellen gezielt zu ändern, - das sollte dann die notwendigen Zugriffe über OLE reduzieren.

Ich habe zum Beispiel bei Konvertierungen oft die Werte des Corel Ventura eingetragen. Das Ergebnis passte meistens.
Trennungen und Zeilenumbrüche weichen natürlich oft ab, aber das soll ja auch schon bei unterschiedlichen InDesignversionen vorkommen.

Grundsätzlich hast Du aber recht:

Mache alles was geht mit IDML und korrigiere, wenn notwendig, per Skript in InDesign.


als Antwort auf: [#471168]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

Marc Sidon
Beiträge gesamt: 262

20. Jul 2011, 23:49
Beitrag # 27 von 28
Beitrag ID: #476411
Bewertung:
(4473 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Alle,
nach einer Prüfung mit InDesign der CS 5.5 habe ich nun rausgefunden, dass die Geschwindigkeitseinbußen von Version CS4 und CS5 definitiv der Vergangenheit angehören!

Mit InDesign aus der CS5.5 ist wieder alles im grünen Bereich. Vielmehr ist es subjektiv sogar etwas schneller geworden als CS3 !!!!

Wichtig ist jedoch auch hier das Abschalten des "Preflight"!
Aber auch "mit Preflight" ist die Automation via COM und OLE wieder so schnelle wie eh und je; ohne sogar gefühlt schneller! *freu*

Gruß,
Marc Sidon


als Antwort auf: [#471193]

Unerklärliche Schwankungen der Geschwindigkeit bei Skripten

WernerPerplies
Beiträge gesamt: 2762

21. Jul 2011, 07:27
Beitrag # 28 von 28
Beitrag ID: #476415
Bewertung:
(4453 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Marc,

vielleicht liegt es daran, dass der Schalter UndoModes (normal wohl nur anwendbar per doScript) anders gesetzt ist.

Das UnDo scheint die Geschwindigkeit bei InDesign erheblich zu beinflussen:
s. a. ScriptingGuide ...: Controlling Undo with doScript

Das erklärt auch die große Zahl der Diskzugriffe bei normaler Arbeit und daraus resultiert der große Geschwindigkeitszuwachs bei Einsatz einer richtig konfigurierten SSD.


als Antwort auf: [#476411]
X