Оптимизация времени загрузки
Оптимизация не только связана с улучшением частоты кадров. Быстрое время загрузки также критически важно. Чем быстрее загружается ваше приложение, тем больше вероятность, что пользователи останутся, чтобы испытать его. Стремитесь к тому, чтобы ваше приложение загружалось менее чем за 5 секунд, чтобы предотвратить уход пользователей.
Вот несколько советов для достижения сверхбыстрого времени загрузки:
- В целом, предпочитайте формат JPG для текстур вместо PNG. Исключениями являются случаи, когда вам требуется альфа-канал или когда сжатие JPG создает заметные артефакты (например, с картами нормалей или глянцевыми картами).
- Ищите возможности для уменьшения размера некоторых текстурных изображений. Например, текстура 2048x2048, используемая на небольшом графическом объекте, может выглядеть почти так же на 1024x1024 или даже 512x512.
- Не предварительно загружайте ассеты, которые могут быть загружены асинхронно. Например, возможно, не требуется, чтобы ваша игровая музыка начинала играть сразу при запуске игры, поэтому рассмотрите возможность снятия галочки с опции Preload для этого ассета в панели Inspector.
- Если у вас есть предварительно отфильтрованная кубическая карта и вы не отображаете верхний уровень мип-карты для скибокса, вы можете снять галочку с предварительной загрузки для всех 6 изображений граней.
- Если вы не создаете экземпляры шаблонов (Templates) во время выполнения, снимите галочку с предварительной загрузки ассетов, так как они не нужны. (См. 'Когда мне нужно загружать ассеты шаблонов?' для получения дополнительной информации).
- Убедитесь, что импортированные модели имеют только те вершинные атрибуты, которые вам нужны. Например, если ваша модель имеет второй набор UV-координат, но не использует их, или если она имеет вершинные цвета, полностью белые, вернитесь в приложение для моделирования и удалите эти атрибуты.
- Используйте панель Networking в инструментах разработчика Chrome (или эквивалент в других браузерах) для сортировки загруженных ассетов по размеру и поиска чего-то необычного. Ищите ассеты, которые не используются и могут быть удалены. Ищите ассеты, которые являются по сути дубликатами, и удаляйте их.
- Использование встроенного физического движка PlayCanvas обходится дополнительной стоимостью загрузки в 379 КБ. Если вы используете физический движок для решения очень простых задач, рассмотрите возможность создания альтернативного решения, которое не влечет за собой штраф за загрузку.
- Если вы размещаете ваше приложение PlayCanvas на своем хостинге, обязательно настройте ваш веб-сервер на предоставление файлов с GZIP-сжатием. В частности, файлы JSON и JS.
Лучшие практики последовательности загрузки
Помимо указанных выше рекомендаций, можно удержать пользователей, разделяя загрузку на несколько этапов и предоставляя пользователям что-то новое для взаимодействия или просмотра.
Используя Virtual Voodoo в качестве примера, мы можем показать 'типичную' последовательность, которую большинство приложений будет использовать для браузерных взаимодействий.
Игра имеет 3 фазы:
- Предзагрузчик
- Заставка и настройка персонажа
- Основная игра
Фаза предзагрузчика загружает ассеты, необходимые для первой сцены PlayCanvas, которая является заставкой и настройкой персонажа. Это включает ассеты для пользовательского интерфейса, модели персонажа и ассеты.
Когда активен экран заголовка, игра начинает фоновую загрузку ассетов, необходимых для основной игры. Во время перехода к экрану заголовка и возможного взаимодействия с настройкой персонажа, когда пользователь нажимает кнопку старт, ассеты для основной игры могут уже быть загружены.
Однако, если пользователь нажимает кнопку старт до того, как ассеты закончат загрузку, на кнопке появится индикатор прогресса. Как только он достигнет 100%, игра автоматически перейдет к основной игре.
С загрузкой ассетов по фазам и предоставлением чего-то нового для взаимодействия пользователя и/или просмотра периодически, пользователь остается вовлеченным, несмотря на длительное время загрузки.
Дополнительные улучшения
Некоторые разработчики идут настолько далеко, что сокращают фазу предзагрузчика до минимума и добавляют 'внутриприложенческий' экран загрузки, который позволяет разработчику заполнять ассетами и текстом, связанными с приложением, использовать анимацию и т.д. Это вовлекает пользователя, так как они видят что-то, что напрямую связано с приложением.
Если игра позволяет, использование общих заполнителей во время загрузки более детализированных ассетов может позволить пользователю взаимодействовать с приложением быстрее.
Пример ниже демонстрирует использование силуэта персонажа в качестве заполнителя до тех пор, пока он полностью не загрузится. Заполнитель силуэта имеет небольшой размер файла, поэтому он может быть частью предварительной загрузки и также может быть использован для других персонажей в приложении.