Как повысить производительность при добавлении InDesign XMLElements через AppleScript?

У меня есть программа AppleScript, которая создает теги XML и элементы в документе Adobe InDesign. Данные находятся в таблицах, и маркировка каждой ячейки занимает 0,5 секунды. Весь сценарий занимает несколько часов.

Я могу опубликовать код внутреннего цикла, но я не уверен, должен ли SO быть общим или конкретным. Я позволю толпе решить.

[править] Код строит список (до этого цикла), который содержит один элемент на строку в таблице. Существует также список, содержащий одну строку для каждого столбца в таблице. Для каждой ячейки программа создает элемент XML и тег XML путем объединения элементов в позициях [row] / [column] двух списков. Он также связывает текст в этой ячейке с вновь созданным элементом.

Я совершенно новичок в AppleScript, поэтому часть этого кода грубо модифицирована из примеров Adobe. Если код зверский, я не буду обижаться.

Вот код:

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

РЕДАКТИРОВАТЬ: я перефразировал вопрос, чтобы лучше отразить правильный ответ.

14.08.2008 19:32:03
5 ОТВЕТОВ

Я могу опубликовать код внутреннего цикла, но я не уверен, должен ли SO быть общим или конкретным. Я позволю толпе решить.

Код, который вы публикуете в качестве примера, может быть настолько конкретным, насколько вам (или вашему боссу) удобно - чаще всего вам легче помочь с более конкретными деталями.

0
14.08.2008 19:34:54

Если код внутреннего цикла имеет разумную длину, я не вижу причин, по которым вы не можете его опубликовать. Я думаю, что переполнение стека призвано охватить как общие, так и конкретные вопросы.

0
14.08.2008 19:34:54

Проблема почти наверняка в выборе. Есть ли в любом случае вы могли бы извлечь весь текст сразу, а затем перебрать внутренние переменные?

1
26.08.2008 17:07:13

Используете ли вы InDesign или InDesign Server? Сколько страниц в вашем документе (или какую другую информацию вы можете рассказать нам о настройке документа / идентификатора)?

Я много занимаюсь разработкой InDesign Server. Вы можете увидеть замедление по нескольким причинам, которые не обязательно связаны с кодом.

Прямо сейчас я почти полностью генерирую 100-300 страниц документов из script / xml примерно за 100 секунд (возможно, вы делаете что-то гораздо большее).

0
8.09.2008 20:52:00
РЕШЕНИЕ

Я понял это.

Документ содержит несколько таблиц данных. Всего существует около 7000 точек данных, которые необходимо экспортировать. Я создавал один корневой элемент с 7000 детей.

Не делай этого. Добавление каждого дочернего элемента в корневой элемент становилось все медленнее и медленнее, пока не истекло около 5000 дочерних элементов AppleScript и программа не была прервана.

Решение состояло в том, чтобы сделать мой код более хрупким, создав ~ 480 детей без корня, при этом у каждого ребенка было около 16 внуков. То же количество узлов, но код теперь выполняется достаточно быстро. (Обработка документа по-прежнему занимает около 40 минут, но это бесконечно меньше времени, чем бесконечность.)

Между прочим, первоначальный план на 7000 детей был не таким глупым или ленивым, как кажется. Новое решение заставляет меня связывать две таблицы, используя данные в таблицах, которые я не контролирую. Программа теперь сломается, если будет столько места, где ее не должно быть. (Но это работает.)

1
23.10.2008 15:33:52