Арифметика времени: почему пачка идёт медленно
Считает ваше устройство, а не сервер, и считает последовательно: одна страница за раз, один файл за раз. Поэтому время растёт по числу страниц, а не по числу файлов — десять пятистраничных документов обходятся примерно как один пятидесятистраничный. Подбор под точный размер множит эту работу на число проходов: до семи полных перерисовок PDF и до двадцати одного кодирования картинки. Параллельности нет ни на одном шаге.
Коротко о цифрах
- Где идёт расчёт
- в браузере у 19 инструментов из 34
- Параллельность
- отсутствует, страницы обрабатываются по очереди
- Проходов при подборе размера PDF
- до 7
- Кодирований при подборе размера картинки
- до 21 — три круга по семь
- Память на страницу A4 при 300 DPI
- около 33 МБ
- Потолок стороны канваса
- 4096 пикселей
Из чего складывается время
- Разбор документа — один раз на файл, дешёвый шаг.
- Отрисовка страницы в пиксели — главный расход, и он повторяется для каждой страницы.
- Кодирование в JPEG или PNG — тем дороже, чем больше пикселей получилось.
- Сборка нового PDF и сохранение — один раз на файл.
- Скачивание — мгновенно, файл к этому моменту уже лежит в памяти вкладки.
Почему проходов бывает семь
Когда вы задаёте не качество, а точный размер, инструмент не может угадать нужную настройку — он её ищет. Сначала проверяется максимум шкалы: вдруг документ и так укладывается. Потом минимум: вдруг цель недостижима в принципе. Если цель лежит между границами, идёт бисекция, и всего разрешено до семи полных перерисовок документа.
У картинок счёт другой, но принцип тот же: бисекция качества в диапазоне от 25 до 95 занимает семь кодирований, а если потолок всё равно не взят, добавляются два круга с уменьшенной стороной — до 0,7 и до 0,5 от исходной. В худшем случае получается двадцать один проход кодирования по одному снимку.
Сколько это занимает памяти
- A4 при 300 DPI — это 2480 × 3508 пикселей, около 8,7 мегапикселя.
- В памяти такая страница занимает примерно 33 МБ, и так по очереди на каждую страницу.
- Канвас освобождается сразу после шага, иначе десяток страниц подряд выбирает весь бюджет вкладки.
- iOS Safari закрывает вкладку примерно на гигабайте, поэтому там пачку лучше дробить заранее.
- Сторона канваса ограничена 4096 пикселями: A3 при 300 DPI не влезает и зажимается примерно до 248 DPI.
Что реально ускорит
- Фиксированное качество вместо точного размера — один проход вместо семи.
- Меньше DPI при переводе в картинки: 150 вместо 300 даёт вчетверо меньше пикселей.
- Компьютер вместо телефона: больше памяти и быстрее одно ядро.
- Дробление пачки на части и закрытые тяжёлые вкладки рядом.
- Не сжимать то, что уже сжато: если результат окажется больше исходника, вам вернут исходник, но время уже потрачено.
Частые вопросы
Можно ли ускорить обработку, открыв несколько вкладок?
Нет, станет только хуже. Вкладки делят память и процессор одного устройства, а каждая копия инструмента держит свои страницы в памяти. Последовательная работа в одной вкладке заканчивается раньше.
Почему индикатор подолгу стоит на одном месте?
Прогресс обновляется по завершении страницы, а не непрерывно. На тяжёлой странице со сканом шаг занимает секунды, и полоса выглядит замершей, хотя работа идёт нормально.
Быстрее ли будет на сервере?
Не обязательно. Серверные инструменты выполняют не больше двух конверсий одновременно и отказывают, когда очередь длиннее пяти, поэтому в час пик ожидание съедает выигрыш в скорости самой машины.
Зависит ли время от веса файла?
Слабее, чем кажется. Считаются страницы и пиксели: документ на пять мегабайт из пятидесяти текстовых страниц обрабатывается дольше, чем скан на двадцать мегабайт из трёх страниц.