Приложение содержит около 42 000 сжатых HTML-файлов (
Код: Выделить всё
.zstПроблема
Моя производственная сборка iOS занимает 325 МБ, но при первом запуске она создает еще 330 МБ в «Документах и данных» — по сути, дублируя все ресурсы.
Первый запуск также занимает более 1 минуты, что составляет неприемлемо.
Что я пробовал
Изначально использовал Asset.fromModule() с импортом для каждого файла документа.
- Это приводит к тому, что Expo автоматически извлекает все импортированные ресурсы для кэширования при первом запуске.
- Отсюда дублирование и медленный запуск.
/>
- Файлы там не существуют.
- Я думаю, это потому, что я их импортирую, поэтому они встроены в пакет JS, а не включены как отдельные ресурсы в комплекте.
- Работает только assets.localUri, но он указывает на расположение извлеченного кэша (дублирование, которое я пытаюсь избежать).
- То же самое с DownloadAsync — работает, но дублирует файл и работает медленнее.
Файлы должны быть объединены в приложение во время сборки, а затем считываться непосредственно из пакета по требованию, когда пользователь открывает страницу документа.
Не нужно ничего копировать — просто откройте связанный файл и прочитайте его байты.
Кажется, что это должно быть просто — файлы находятся в пакете (325 МБ доказывают это).
Я просто хочу прочитать их, не копируя их Expo. сначала кэшировать.
Он также отлично работает в сборках для разработки и в Интернете — проблемы возникают только в собственных сборках.
Текущая архитектура
- Тысячи сжатых HTML-файлов .zst
- Манифесты с операторами импорта для каждого файла (создаются автоматически)
- Файлы на него ссылается хеш в манифесте, загружается по требованию, когда пользователь переходит на страницу.
- Тип файла zst добавляется как внешний ресурс в конфигурацию Metro.
- В настоящее время в app.json ничего не делается для этих ресурсов.
- Следует ли использовать assetsBundlePatterns вместо импорта?
Сделает ли это их доступными через Paths.bundle? - Есть ли способ объединить файлы без импорта, чтобы Expo не извлекала их автоматически?
- Неизбежно ли извлечение assets.localUri при использовании Asset.fromModule()?
- Должен ли я использовать совершенно другой подход для объединения такого количества файлов?
Или вообще не объединять их и получить к ним доступ другим способом?
- Expo SDK 54
- React Native 0.81.5
- EAS Build (рабочие сборки iOS)
- Включена новая архитектура
Подробнее здесь: https://stackoverflow.com/questions/798 ... n-to-cache
Мобильная версия