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