Одна функция, несколько мегабайт
«Нужно просто открыть документ». Обычно после этого выбирают пакет, добавляют кнопку и смотрят, насколько выросла сборка. Если прибавка не нравится, предлагают передать PDF внешнему приложению.
Но что именно было оптимизировано: реализация или требование?
Покупатель забирает чек. Выездной инженер читает инструкцию, пока заполняет акт. Человек изучает договор и копирует реквизиты. Одна кнопка скрывает разные задачи. Во втором случае нужно вернуться в заполненную форму и продолжить без сети. В третьем — получить доступ к тексту, а не только к изображению страницы. В эксперименте ArkTelos Lab собраны четыре Android release APK одной архитектуры: общая оболочка без просмотрщика и три способа открыть тот же PDF.
Прибавка к исходной сборке: • open_filex 5.0.0, передача внешней программе — 0,254 МиБ; • pdfx 2.11.0, встроенный просмотр через Android PdfRenderer — 0,141 МиБ; • pdfrx 2.4.8 с включённым PDFium — 7,098 МиБ.
Неожиданная деталь: встроенный вариант оказался немного меньше внешнего. Механизм передачи файла тоже имеет зависимости; у open_filex в APK выросли Android-код и ресурсы. А почти вся прибавка pdfrx объясняется нативной библиотекой PDFium и ростом скомпилированного Dart-кода.
Это не рейтинг качества. Сборки не запускались на устройствах: скорость, память, доступность и совместимость документов не проверялись. Размер APK — не магазинная загрузка и не место после установки. Измерены названные версии, не последние версии пакетов вообще.
Меньшая сборка может просто перенести работу в другую программу, которую пользователю ещё нужно установить. Большая — включить нужный движок. А может включить возможности, без которых конкретный продукт спокойно обойдётся. Ответ появляется после описания действий человека, не после подсчёта зависимостей.
Полный материал «Одна функция, несколько мегабайт. Что на самом деле весит во Flutter-приложении?» — с кодом, командой сборки и размерами в байтах.
ArkTelos | Журнал | Telegram Lab RU | Telegram Lab EN | Telegram ArkTelos RU | Telegram ArkTelos EN