Браузер зависает на обработке PDF
Обработка идёт целиком в вашей вкладке, поэтому упирается она не в интернет, а в оперативную память устройства. Каждая страница на время работы разворачивается в растр: лист А4 при высоком разрешении — это около 8,7 миллиона точек и примерно 33 мегабайта. На iOS вкладка закрывается около гигабайта занятой памяти, то есть тридцать страниц, не освобождённых вовремя, — это уже предел.
Коротко о цифрах
- Память на страницу
- А4 при 300 DPI — около 8,7 Мпикс и примерно 33 МБ
- Потолок вкладки на iOS
- около 1 ГБ занятой памяти
- Как экономится память
- ресурсы страницы освобождаются, а холст обнуляется после каждого цикла
- Потолок холста
- 4096 точек по стороне — кросс-браузерное ограничение
- Стоимость подбора размера
- до 7 полных ререндеров всего документа
Почему память кончается именно здесь
Страница PDF хранится как набор команд рисования, а работать с ней нужно как с картинкой. Каждый лист приходится развернуть в растр, а растр — это четыре байта на точку. При высоком разрешении лист А4 занимает десятки мегабайт, и держать в памяти сразу весь документ невозможно ни на каком устройстве.
Поэтому страницы обрабатываются по одной, и после каждой её ресурсы освобождаются, а холст обнуляется — иначе браузер не отдаёт память до конца цикла и расход растёт линейно с числом страниц. Отдельно ограничен размер холста: четыре тысячи точек по стороне. Это кросс-браузерный потолок, за которым холст просто перестаёт рисоваться, а не рисуется медленнее.
Что делать прямо сейчас
- Закройте лишние вкладки: они делят с обработкой одну и ту же память устройства.
- Разделите документ на части по десять-двадцать страниц и обработайте их по очереди.
- Если нужны конкретные страницы, извлеките только их — обрабатывать весь документ ради трёх листов незачем.
- Не запускайте вторую обработку, пока идёт первая: они складывают расход памяти, а не делят его.
- На телефоне беритесь за большой документ только после разделения — там потолок вкладки заметно ниже.
Какие операции самые дорогие
- Сжатие до заданного размера: подбор делает до семи полных ререндеров всего документа, и на двухстах страницах это тысяча четыреста отрисовок.
- Перевод страниц в изображения: каждая страница разворачивается в растр целиком, и чем выше выбранное разрешение, тем дороже.
- Редактор с предпросмотром: рядом с растром страницы держится ещё и разобранный текстовый слой.
- Объединение и разделение, наоборот, дёшевы: страницы копируются без разворачивания в картинку.
Частые вопросы
Почему обработка не идёт на сервере, где памяти больше?
Потому что тогда ваш файл пришлось бы туда отправить. Большинство инструментов работает в браузере именно ради этого: документ не покидает устройство, и платой за приватность становится ограничение по памяти вкладки.
Помогает ли более быстрый интернет?
Нет, никак. Файл никуда не передаётся, и скорость соединения на обработку не влияет вообще. Значение имеют только объём памяти устройства, число страниц и выбранное разрешение.
Сколько страниц можно обработать за один раз?
Зависит от устройства и операции. На настольном браузере сотня страниц обычно проходит спокойно, на телефоне разумный шаг — десять-двадцать, а при сжатии до заданного размера считайте ещё и на семь проходов подбора.
Вкладка перезагрузилась. Файл испорчен?
Нет. Исходный файл лежит у вас на диске и не изменяется: инструменты работают с копией в памяти и создают новый документ. Перезагрузка вкладки означает потерю результата, но не оригинала.