Как я могу повысить производительность при добавлении InDesign XMLElements с помощью AppleScript?

StackOverflow https://stackoverflow.com/questions/11574

Вопрос

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

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

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

Я совершенно новичок в 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

Редактировать:Я перефразировал вопрос, чтобы лучше отразить правильный ответ.

Это было полезно?

Решение 2

Я разобрался с этим делом.

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top