Мы ценим вашу конфиденциальность. Мы используем файлы cookie, чтобы улучшить ваш опыт на нашем сайте. Используя этот сайт, вы соглашаетесь с нашей Политикой конфиденциальности.

Баннер производительности WebGL в Safari.

Safari — особенно на iOS — всегда считался вершиной вызовов производительности для разработчиков, создающих приложения на базе 3D веб. Реализация WebGL на базе Metal, совместно с уникальными характеристиками производительности WebKit, делает работу с ними особенно интересной.

В этой статье мы предлагаем вам некоторые советы по улучшению производительности ваших приложений WebGL в Safari.

Apple Vision Pro 

В последнее время с запуском Apple Vision Pro производительность WebGL в Safari приобрела еще большее значение, поскольку версия Safari от Apple Vision унаследовала все особенности производительности Safari на MacOS и iOS.

Вскоре мы опубликуем полную статью о WebXR с Apple Vision Pro. Подпишитесь на нашу рассылку, чтобы получить уведомление.

Wonderland Engine на Apple Vision Pro 

Если вы уже используете Wonderland Engine, у нас есть хорошие новости: все оптимизации, которые мы сделали для нашего релиза 0.9.0, применимы и к Apple Vision Pro.

Разработчики, имеющие доступ к Apple Vision Pro, сообщают о высокой производительности своих приложений на основе Wonderland Engine:

Оптимизация для Safari 

Если вы используете другую среду, не забудьте ознакомиться с нашим постом о профилировании производительности WebGL. Этот пост содержит советы о том, как найти узкие места в вашем приложении, чтобы понять, что именно нужно оптимизировать.

Кроме того, вот несколько замечаний о том, что вы можете обнаружить в Safari при профилировании. Это не универсальное решение, профилируйте своё приложение, чтобы выявить, что вызывает проблемы.

Узкие места 

Вот несколько характерных проблем, с которыми вы можете столкнуться при работе с WebGL в Safari:

Униформ Буферы 

Из-за различий между графическим API Apple Metal и WebGL, Safari приходится эмулировать униформ буферы в стиле WebGL. Эта эмуляция создает трудности в прогнозировании производительности UBO: в одних случаях всё работает нормально, в то время как в других может возникнуть задержка 150 мс при попытке загрузить данные в неподходящий момент времени.

Этот фрагмент кода из реализации Metal в Angle (используемой WebKit для реализации API WebGL2) указывает на реализацию GLES, эквивалентную WebGL bufferSubData. Он помогает понять, на какие усилия идут разработчики браузеров, чтобы создать согласованный графический API. Он также показывает, до каких усилий доходит команда Wonderland Engine, чтобы помочь вам понять производительность браузера и оптимизировать её.

Многое вызывало недовольство по поводу долгого времени ожидания поддержки WebGL2 в Safari. Однако, вопреки предположениям, что такая поддержка никогда не будет реализована, они добавили поддержку WebGL2 в сентябре 2021 года с Safari 15. Чтение кода WebKit и Angle вызывает некоторое сопереживание, так как показывает, почему это могло быть трудной задачей.

Доступ к Состоянию WebGL 

Функция WebGL getParameter может преподнести вам несколько неприятных сюрпризов с точки зрения производительности. То, что кажется простым действием, может занять ресурсное время.

Ошибка WebGL 

Хотя проверка ошибок с помощью getError обычно является хорошей практикой, избегайте этого вне вашего frame callback, поскольку это может оказаться более ресурсозатратным, чем следует.

Память и ограничения 

WebGL в Safari сообщает об ограничениях на размеры текстур, слоев, размеры униформ буферов и другие. Хорошим инструментом для проверки этих ограничений является webglreport.com.

Хотя в теории Safari позволяет выделять память до этих ограничений, вы можете столкнуться с ситуацией, при которой это приведет к сбою страницы.

Для более эффективного использования памяти на iOS, Wonderland Engine предлагает функцию, называемую Texture Streaming, которая динамически заменяет части текстур в памяти и из неё в зависимости от актуальных нужд в кадре. Эта функция включена по умолчанию.

Заключительные слова 

В ближайшее время мы подготовим детальный пост о WebXR на Apple Vision Pro. Подпишитесь на нашу рассылку, чтобы получить уведомление о его выходе.

До тех пор мы надеемся, что вы дадите шанс Wonderland Engine! Особенно если вы уже знакомы с Unity, Wonderland Engine легко изучить.

Не забудьте присоединиться к нашему серверу в Discord, где мы будем рады помочь вам найти нужные ресурсы для начала работы.

Last Update: April 27, 2025

Будьте в курсе.