¿Cómo puedo mejorar el rendimiento al agregar InDesign XMLElements a través de AppleScript?

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

Pregunta

Tengo un programa AppleScript que crea etiquetas y elementos XML dentro de un documento de Adobe InDesign.Los datos están en tablas y etiquetar cada celda lleva 0,5 segundos.El guión completo tarda varias horas en completarse.

Puedo publicar el código del bucle interno, pero no estoy seguro de si se supone que SO es genérico o específico.Dejaré que la mafia decida.

Editar] El código construye una lista (antes de este bucle) que contiene un elemento por fila en la tabla.También hay una lista que contiene una cadena para cada columna de la tabla.Para cada celda, el programa crea un elemento XML y una etiqueta XML concatenando los elementos en las posiciones [fila]/[columna] de las dos listas.También asocia el texto de esa celda al elemento recién creado.

Soy completamente nuevo en AppleScript, por lo que parte de este código se modificó burdamente a partir de muestras de Adobe.Si el código es atroz, no me ofenderé.

Aquí está el código:

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

EDITAR:He reformulado la pregunta para reflejar mejor la respuesta correcta.

¿Fue útil?

Solución 2

Esto lo descubrí.

El documento contiene un montón de tablas de datos.En total, hay alrededor de 7.000 puntos de datos que deben exportarse.Estaba creando un elemento raíz con 7.000 niños.

No hagas eso.Agregar cada niño al elemento raíz se volvió cada vez más lento hasta que alrededor de 5,000 niños AppleScript agotó el tiempo de espera y el programa abortó.

La solución fue hacer que mi código fuera más frágil creando ~480 hijos a partir de la raíz, y cada hijo tendría alrededor de 16 nietos.La misma cantidad de nodos, pero el código ahora se ejecuta lo suficientemente rápido.(Aún se necesitan unos 40 minutos para procesar el documento, pero eso es infinitamente menos tiempo que infinito).

Por cierto, el plan original de 7.000 niños no era tan estúpido ni tan perezoso como parece.La nueva solución me obliga a vincular las dos tablas utilizando datos en las tablas que no controlo.El programa ahora se interrumpirá si hay un espacio donde no debería haberlo.(Pero funciona.)

Otros consejos

Es casi seguro que el problema sea la selección.¿Existe alguna forma de extraer todo el texto a la vez y luego iterar sobre las variables internas?

Puedo publicar el código del bucle interno, pero no estoy seguro de si se supone que SO es genérico o específico.Dejaré que la mafia decida.

El código que publique como ejemplo puede ser tan específico como usted (o su jefe) se sienta cómodo; la mayoría de las veces, es más fácil ayudarlo con detalles más específicos.

Si el código del bucle interno tiene una longitud razonable, no veo ningún motivo por el que no puedas publicarlo.Creo que Stack Overflow pretende abarcar preguntas tanto generales como específicas.

¿Estás utilizando InDesign o InDesign Server?¿Cuántas páginas tiene su documento (o qué otra información puede brindarnos sobre la configuración de su documento/identificación)?

Hago mucho desarrollo de InDesign Server.Podrías ver ralentizaciones por un par de razones que no están necesariamente relacionadas con el código.

En este momento, estoy generando documentos de 100 a 300 páginas casi completamente desde script/xml en aproximadamente 100 segundos (es posible que estés haciendo algo mucho más grande).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top