[GastForen Programmierung/Entwicklung AppleScript OS X und XPress: Scriptausführung beschleunigen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

OS X und XPress: Scriptausführung beschleunigen

Hans Haesler
  
Beiträge gesamt: 5816

25. Feb 2004, 17:43
Beitrag # 1 von 4
Bewertung:
(793 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Verschiedentlich wurde gemeldet, dass die Ausführung von QuarkXPress-Scripts unter Mac OS X erheblich länger dauert. Es ist zwar allgemein bekannt, dass Scripts unter QXP 3.32 am fixesten laufen. Und es ist auch logisch, dass das Ausführen beim Ansprechen der immer schwerfälliger werdenden Versionen auch darunter leidet.

Einen Teil der Schuld muss man sicher auch dem langsameren Mac OS X zuschieben. Aber was kann man tun, um Scripts zu optimieren?

Hier ein konkretes Beispiel: Es geht darum, in einem Projekt die Textboxen nach Absätzen zu durchforschen, welche mit einer bestimmten Stilvorlage formatiert sind. Sobald eine Übereinstimmung gefunden ist, wird die Position der Grundlinie notiert, sowie die Anzahl Zeilen des Absatzes und der Zeilenabstand. Mit diesen Parametern wird hinter der entsprechenden Textbox eine Hintergrundbox erstellt.

Mit QuarkXPress 4.11 geht dieses Abfragen so rasch, dass sämtliche Boxen nach 1,5 Sekunden erzeugt sind (dank 'do script' und OSA Menu). Mac OS 9.2.1, G3/450MHz.

Mit QuarkXPress 6.1 und unter Mac OS X 10.3.2, G4/800MHz muss man sich viel länger gedulden: 18 Sekunden …

Abhilfe: versuchen, das direkte Ansprechen der Absätze zu vermeiden. Statt so …
---
repeat with p from 1 to count of paragraphs
  tell paragraph p
    set curName to name of style sheet
    if curName = styleSheetName then
      set leadVal to leading as millimeter units as real
      set base1 to baseline of line 1 as real
      set nLines to (count of lines) - 2
      my makeBox()
    end if
  end tell
end repeat
Code
… werden alle Namen in eine Liste geschrieben. Das Script geht die Liste durch. Erst wenn ein Name mit dem vorgegebenen übereinstimmt, wird der Absatz direkt angefragt: 

set styleSheetList to name of style sheet of every paragraph
repeat with p from 1 to count of styleSheetList
  set curName to item p of my styleSheetList
  if curName = styleSheetName then
    tell paragraph p
      set leadVal to leading as millimeter units as real
      set base1 to baseline of line 1 as real
      set nLines to (count of lines) - 2
    end tell
    my makeBox()
  end if
end repeat
---
Damit vermeidet man die unzähligen direkten Anfragen an XPress. Die Ausführungszeit wird auf 7 Sekunden reduziert. Auch hier: mit 'do script' und ab dem XPress-eigenen Script-Menü.

Hans Haesler <[email protected]>
X

OS X und XPress: Scriptausführung beschleunigen

Anonym
Beiträge gesamt: 22827

25. Feb 2004, 23:58
Beitrag # 2 von 4
Beitrag ID: #418649
Bewertung:
(792 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
ohne dir zu nahe treten zu wollen:

"halbgare" aus dem Zusammenhang gerissene Code-Snippets bringen m. E. wenig.

Könntest du eine Test-Datei nebst entsprechendem Script bereitstellen?

Karsten


als Antwort auf: [#418648]

OS X und XPress: Scriptausführung beschleunigen

Hans Haesler
  
Beiträge gesamt: 5816

26. Feb 2004, 09:22
Beitrag # 3 von 4
Beitrag ID: #418650
Bewertung:
(792 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Karsten,

bei obigem Beispiel geht es darum, das Prinzip zu illustrieren:
Langsam: Die Absätze der Reihe nach direkt ansprechen und jedes Mal den Namen der Stilvorlage verlangen.
Schnell: Das Script geht eine Liste durch (die Namen der Stilvorlagen).

Im ersten Snippet geht die Wiederholschleife mit dem Zähler 'p' die Absätze durch und spricht sie direkt an: 'tell paragraph p'.

Im zweiten Snippet wird zuerst die Liste der Stilvorlagennamen erstellt. Dann geht die Wiederholschleife diese Liste durch, erneut mit dem Zähler 'p': 'repeat with p from 1 to count of styleSheetList'. Dabei wird immer das aktuelle Element in die Variable 'curName' gegeben: 'set curName to item p of my styleSheetList'. Das Wörtchen 'my' hilft, den Zugriff auf die Liste zu beschleunigen. In der nächsten Zeile wird der Name mit dem vorgegebenen verglichen: 'if curName = styleSheetName then'. Und erst wenn er übereinstimmt, wird der Absatz direkt adressiert.

Und warum ist dies schneller? Weil vermieden wird, zwischen Script und XPress unnötige AppleEvents auszutauschen. Das Untersuchen der Liste geschieht im Speicher. Mit XPress 4.11 ist die erste Methode so schnell, dass eine Steigerung nicht unbedingt notwendig ist. Doch wegen der dramatischen Verlangsamung unter Mac OS X muss man darauf achten, die Befehle an XPress auf ein Minimum zu beschränken.

Ich sende Dir gerne eine Test-Datei und das Script. Bitte schicke mir ein privates Mail.

Hans Haesler <[email protected]>


als Antwort auf: [#418648]

OS X und XPress: Scriptausführung beschleunigen

Hans Haesler
  
Beiträge gesamt: 5816

27. Feb 2004, 17:34
Beitrag # 4 von 4
Beitrag ID: #418651
Bewertung:
(792 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Karsten hat mir einen konstruktiven Vorschlag gemacht: Eine Liste der Indizes der Absätze, welche mit der gegebenen Stilvorlage formatiert sind erstellen (statt eine Liste der Stilvorlagen-Namen):
Code
set theParas to (index of every paragraph whose length > 1 and name of style sheet is styleSheetName) 

In die Bedingung wird gleichzeitig die Anzahl Zeichen gegeben (mehr als 1). Somit entfällt der ursprüngliche Test &#133;
Code
if (count of characters) > 1 then 

&#133; welcher notwendig ist, um zu vermeiden, dass die Hintergrundboxen auf eventuellen Leerzeilen erzeugt werden.

Die Konstruktion des Codes wird etwas einfacher und direkter. Dies resultiert in einer Beschleunigung der Ausführung: Mit einem reellen Projekt dauert es noch 6.5 Sekunden (statt 8.5). Nicht spektakulär aber immerhin &#133;

Danke Karsten!

Ich werde nach meiner Rückkehr aus dem Skiurlaub versuchen, weitere Steigerungen zu erzielen.

Hans Haesler <[email protected]>


als Antwort auf: [#418648]
X

Aktuell

PDF / Print
300_PDF20

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022