Замедлилась работа скриптов. Что можно сделать?

  • Автор темы Автор темы teatral
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

teatral

Участник
Топикстартер
Сообщения
350
Реакции
365
С какого-то момента скрипты, пробегающие целый документ по параграфам стали тормозить
Есть предположение, что мог скопиться мусор из невидимых объектов
Кто может посоветовать что именно посмотреть?
Или какие-то другие мысли?
 
1. Если это версии InDesign CC2014, то возможно. Делаем так — сохраняем копию публикации, экспортируем текущую в IDML, закрываем, открываем IDML, получаем свеженькую новую публикацию.
Внимание: если верстка выглядит как аппликация в детском саду, будет много ошибок оверсета текста.
2. Возможно, вы запускаете скрипт несколько раз в разных или конкретной публикации. InDesign омерзительно работает с памятью, постоянно зачем-то все откладывая себе на всякий случай, если происходит много разных действий, связанных с Undo (замена, скажем, того же текста), или собиранием информации в переменные. Так что если публикация очень большая и замен или операций с хранением каких-либо переменных (или мегапеременной какой-нибудь) будет много, то лучше сначала закрыть индез, подождать минуту-другую, чтобы он полностью выгрузился из памяти компьютера, запустить заново и только тогда запустить скрипт.
 
  • Спасибо
Реакции: teatral
Делаем так — сохраняем копию публикации, экспортируем текущую в IDML, закрываем, открываем IDML, получаем свеженькую новую публикацию.
Строго говоря, достаточно сделать Save As в новую INDD публикацию, чтобы он весь старый мусор из файла повыкидывал,
 
  • Спасибо
Реакции: teatral
Для CC2014 и старше SaveAs вполне подходит — и размер файла уменьшается очень близко к результату IDML-конверсии. Но у всех CS-ов эта разница достаточно велика.
Впрочем, на своем решении я не настаиваю — однако, в случае проблем с CS6 всегда поступаю вышеописанным мною способом. Дело в том, что при открытии IDML, который, собственно, просто набор XML-файлов с инструкциями, InDesign заново создает бинарный файл, так что в нем если и появятся ошибки, то только сборщика, а не старые "откаты" и "накаты".
 
  • Спасибо
Реакции: teatral
Я не говорю, что в IDML есть что-то плохое, просто это более радикальный метод, причем, иногда небезопасный для публикации.
 
Спасибо, коллеги, так и сделаю. Может именно это и поможет.
Но это если явный мусор. А если скрипт глючит и делает например myDocument.Bookmarks.Add (пример с потолка) или что-то подобное, но забывает потереть старые букмарки
Не думаю, что вышеуказанные способы удалят букмарки, так как они не мусор, а необходимая часть документа
Вот и думаю, как централизованно поискать и такой "мусор"
 
Да, у меня именно 2014 версия
 
но забывает потереть старые букмарки

ну это автор видимо забывает ) значит, надо в скрипт добавить сначала bookmarks.everyItem().remove().
но медленно может работать скорее потому, что сам алгоритм оптимизировать надо, а не документ чистить. надо на конкретном примере смотреть, так это все гадание, конечно
 
ну это автор видимо забывает ) значит, надо в скрипт добавить сначала bookmarks.everyItem().remove().
но медленно может работать скорее потому, что сам алгоритм оптимизировать надо, а не документ чистить. надо на конкретном примере смотреть, так это все гадание, конечно
Спасибо. Как решить проблему с очисткой я найду, если буду знать, что чистить
Я просто хочу понять, есть ли "универсальный" метод найти основные свалки мусора уже в существующем документе (ведь в нем я гонял не только свои скрипты)
 
надо определить критерии, что считать мусором.
а скрипту можно сделать профайлинг, и посмотреть где узкое место.

если пробег по параграфам, логично предположить что параграфов стало больше(?). может, там где-то большие стори на pasteboard болтаются…
 
раз не выводится, значит на pasteboard или в overset

еще такой момент - как перебираются абзацы?

если каждый раз обращаться к коллекции paragraphs - это довольно медленно. я использую такую конструкцию

var allParagraphs = storyRef.paragraphs.everyItem().getElements().slice(0);

ее намного быстрее обрабатывать. Это относится к любым коллекциям, разумеется.
 
  • Спасибо
Реакции: teatral
раз не выводится, значит на pasteboard или в overset
Я имею ввиду в принципе невидимые, типа Bookmarks

еще такой момент - как перебираются абзацы?

если каждый раз обращаться к коллекции paragraphs - это довольно медленно. я использую такую конструкцию

var allParagraphs = storyRef.paragraphs.everyItem().getElements().slice(0);
Я единожды присваиваю переменной var mStorPar=MyStory.Paragraphs
а дальше перебираю myPar=mStorPar.NextItem(myPar)
 
А это все равно обращение к коллекции каждый раз. Попробуйте как я написал, будет быстрее
 
  • Спасибо
Реакции: teatral
Статус
Закрыто для дальнейших ответов.