Cum pot îmbunătăți performanța atunci când adaugă InDesign XMLElements prin intermediul AppleScript?

Am un program AppleScript care creează tag-uri și elemente xml într-un document Adobe InDesign. Datele se găsesc în tabele, iar etichetarea fiecărei celule durează 5 secunde. Întreg scenariul durează câteva ore pentru a fi finalizat.

Pot să post codul bucla interioară, dar nu sunt sigur dacă SO ar trebui să fie generice sau specifice. Voi lăsa mulțimea să decidă.

[Editați | ×] Codul construiește o listă (înainte de această buclă) care conține un element pe rând în tabel. Există, de asemenea, o listă care conține un șir pentru fiecare coloană din tabel. Pentru fiecare celulă, programul creează un element xml și o etichetă xml prin concatenarea elementelor din pozițiile [rând]/[coloana] din cele două liste. De asemenea, asociază textul din acea celulă cu elementul nou creat.

Sunt complet nou în AppleScript, astfel încât o parte din acest cod este modificat brut din probele Adobe. Dacă codul este atroce, nu voi fi ofensat.

Iată codul:

repeat with columnNumber from COL_START to COL_END

    select text of cell ((columnNumber as string) & ":" & (rowNumber as string)) of ThisTable

    tell activeDocument

        set thisXmlTag to make xml tag with properties {name:item rowNumber of symbolList & "_" & item columnNumber of my histLabelList}

        tell rootXmlElement

            set thisXmlElement to make xml element with properties {markup tag:thisXmlTag}

        end tell

        set contents of thisXmlElement to (selection as string)

    end tell

end repeat

EDIT: Am reformulat întrebarea pentru a reflecta mai bine răspunsul corect.

0
fr hi bn

5 răspunsuri

Pot să post codul bucla interioară, dar nu sunt sigur dacă SO ar trebui să fie generic sau specific. Voi lăsa pe mob să decidă.

Codul pe care îl postați ca un exemplu poate fi la fel de specific ca și dvs. (sau seful dvs.) este confortabil cu - mai des decât nu, este mai ușor să vă ajute cu detalii mai detaliate.

0
adăugat

Dacă codul bucla interioară este o lungime rezonabilă, nu văd nici un motiv pentru care nu îl puteți posta. Cred că depășirea stack-ului este destinată să cuprindă atât întrebări generale, cât și întrebări specifice.

0
adăugat

Mi-am dat seama asta.

Documentul conține o grămadă de tabele de date. În total, există aproximativ 7.000 de puncte de date care trebuie exportate. Cream un element rădăcină cu 7000 de copii.

Nu face asta. Adăugarea fiecărui copil la elementul rădăcină a fost mai lentă și mai lentă până la aproximativ 5000 de copii AppleScript s-au oprit și programul a fost anulat.

Soluția a fost de a face codul meu mai fragil prin crearea a aproximativ 480 de copii de pe rădăcină, fiecare copil având aproximativ 16 nepoți. Același număr de noduri, dar codul rulează acum destul de repede. (Încă mai durează aproximativ 40 de minute pentru a procesa documentul, dar acest lucru este infinit mai puțin timp decât infinitul.)

De altfel, planul original de 7.000 de copii nu a fost la fel de prost sau la fel de leneș cum apare. Noua soluție mă forțează să leagă cele două tabele împreună folosind datele din tabelele pe care nu le controlez. Programul se va rupe acum dacă există un spațiu unde nu ar trebui să existe unul. (Dar funcționează.)

0
adăugat

Problema este aproape sigur cea selectă. Există oricum posibilitatea să extrageți tot textul dintr-o dată, apoi să iterați peste variabilele interne?

0
adăugat

Utilizați InDesign sau InDesign Server? Câte pagini este documentul dvs. (sau ce alte informații ne puteți spune despre setarea documentului/ID-ului dvs.)?

Fac o mulțime de dezvoltare InDesign Server. S-ar putea să observați încetiniri pentru câteva motive care nu sunt în mod necesar legate de cod.

În momentul de față, generez 100-300 de pagini aproape complet de script/xml în aproximativ 100 de secunde (poate că faci ceva mult mai mare).

0
adăugat