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

У меня есть программа 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

Обновлено: я перефразировал вопрос, чтобы лучше отразить правильный ответ.

Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
0
1 508
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

I can post the inner loop code, but I'm not sure if SO is supposed to be generic or specific. I'll let the mob decide.

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

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

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

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

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

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

Ответ принят как подходящий

Я понял это.

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

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

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

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

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