Знакомая картина: генплан или план этажа в PDF весит скромные 5–6 мегабайт, а открываешь — ждешь, листаешь вниз — картинка догоняет тебя рывками, приблизил — секунды смотришь на белый экран, пока прорисуется. При этом сам чертеж в AutoCAD или ArchiCAD ведет себя нормально. Беда рождается именно в готовом PDF.
Мы решили разобраться не на словах, а замерами — и заодно проверить все народные приметы («тяжелый файл», «прозрачность виновата», «слишком много слоев»). Результаты оказались неожиданными.
Взяли типичный генплан — тот, что отдают ландшафтники: цветные зоны, деревья, россыпь линий и штриховок-газонов, всего около 1,15 миллиона объектов. И открыли его в трех разных программах:
Мерили две вещи, и их важно не путать:
Каждый замер записан на видео; время — до состояния, после которого изменения на листе неразличимы глазом.
Дальше — прием «убираем по одному»: раскладываем чертеж на составляющие (отдельно заливки, отдельно штриховки, отдельно линии, отдельно кривые) и смотрим, кто виноват.
Главный результат в одной таблице (время открытия, секунды):
| Что в файле | Объектов | Вес | MuPDF | Телефон |
|---|---|---|---|---|
| Все вместе | ~1,15 млн | 5,8 МБ | 3,8 с | 12,5 с |
| Только штриховки | 1,08 млн | 5,1 МБ | 2,7 с | 13,3 с, рывками |
| Только линии-контуры | 71 тыс. | 0,5 МБ | 0,18 с | 1,6 с |
| Только заливки | 3 тыс. | 0,1 МБ | 0,01 с | 0,4 с |
| Только кривые | 4 тыс. | 0,1 МБ | 0,02 с | 0,5 с |
Настольный Acrobat устроен хитрее, и его цифры мы вынесли из таблицы отдельной строкой: каждую составляющую по отдельности он открывает за доли секунды, а целый лист — почти 7 секунд. На миллионе объектов он уходит в повторную перерисовку: целое у него дороже суммы частей.
Виновник виден сразу — штриховки. Точнее, не сами штриховки, а то, что при выводе в PDF каждая штриховка рассыпается на тысячи отдельных черточек, а на весь лист их набирается больше миллиона. Просмотрщик обязан при каждой перерисовке — то есть при каждом листании — пройти их все по одной. Их миллион, отсюда и рывки.
Теперь развеем приметы — мы проверили каждую отдельным замером:
Остается одно: скорость чертежа убивает число отдельных объектов. Все, что раскрошено на сотни тысяч и миллионы мелких кусочков, — вот настоящий груз.
Любопытная деталь для внимательных: если считать «на один объект», то дороже всего обходятся не штрихи, а кривые и заливки. Но их на чертеже тысячи, а штрихов миллион, каждый копеечный, — и вот эта копеечная масса и топит файл. Побеждает не цена одного объекта, а количество.
Логичный вопрос: раз виноваты штриховки, давайте наведем порядок в самом чертеже. На практике это тупик. У нас инженер две недели правил один тяжелый файл — выполнил все рекомендации по штриховкам, привел их к аккуратному масштабу без раздувания. Файл похудел с 30 МБ до 29,5 — и нормально просматривать его все равно никто не смог. Ручная чистка штриховок на сложном чертеже — это дни работы почти без результата, а в самом AutoCAD механизма «сделай мой PDF быстрым» просто нет.
Совет форумов «проектируйте правильно» — без плотных штриховок и текстур — звучит красиво, но работать так невозможно. Штриховки удобны. Заливки удобны. Что теперь, газон точками не показывать?
Мы пошли с другой стороны — лечим уже готовый PDF. Идея простая: все лишнее — текстуры, штриховки-газоны, цветные зоны — свернуть в компактный вид, а все нужное — линии, контуры, текст — оставить резким вектором. Текст ищется, линии острые на любом увеличении, а миллион черточек больше не мешает.
Что это дает на том же листе (открытие / листание):
| MuPDF | Acrobat | Телефон | |
|---|---|---|---|
| Было (все вектором) | 3,8 / 1,3 с | 6,7 / 4,3 с | 12,5 / 8,4 с |
| Стало (после лечения) | 0,5 / 0,2 с | 0,4 / 2,3 с | 2,1 / 3,2 с |
Время — до визуальной готовности листа; замеры записаны на видео.
Открытие быстрее в 5–15 раз, листание в 2–6 раз — в зависимости от устройства. На телефоне разница особенно наглядна: тяжелый вектор листается рывками (просмотрщик не успевает перерисовывать миллион черточек), а вылеченный файл крутится и зумится плавно, как обычная картинка.
Коротко. Чертеж тормозит не от веса, не от прозрачности и не от числа слоев, а от количества отдельных объектов, на которые печать раскрошила штриховки. Руками в AutoCAD это лечится днями и почти без толку. В готовом PDF это лечится за минуты — без потери качества, текст и линии остаются резкими. Мы за два месяца вскрытий насчитали около 120 таких типовых болезней и научились убирать их из готового файла автоматически. Откуда берется вес — разобрали в статье про 113 098 картинок внутри PDF.