Использование javascript для определения производительности CPU/GPU устройства?
(Вопрос не относится к трио .js, но я буду использовать его в качестве примера)
Я использую three.js для разработки интерфейса веб-приложения в последнее время и написал несколько замечательных отступлений между WebGL и Canvas renderer (для настольных браузеров).
Но теперь проблема заключается в том, как правильно определить возможности устройства, есть две проблемы:
- функции браузера (статические функции, такие как webgl/canvas): это в значительной степени разрешено в веб-сообществе с помощью простого обнаружения функции.
- возможность устройства: это сложная часть, без прямого доступа к информации об аппаратном обеспечении устройства, нам нужны некоторые способы сказать, следует ли нам отказаться от менее требовательного к оборудованию кода.
Заметный пример: поддержка мобильных приложений Opera Mobile Mobile/Opera поддерживает WebGL, но они недостаточно или ограничены аппаратным обеспечением устройства.
Несколько обходных решений, которые я придумал до сих пор:
- Использовать общую функцию в качестве индикатора производительности - сенсорное устройство, например, имеет менее мощное оборудование в целом. Кон: это не будущее.
- Черный список известных багги-браузеров/устройств. Нравственность UA будет неизбежной, и ее может быть сложно поддерживать.
- Тест производительности - поэтому вопрос, помимо запуска кода и измерения частоты кадров, есть лучшие варианты?
Или, может быть, это не так сложно, есть ли другие предложения?
Ответы
Ответ 1
В итоге я использовал подход оценки производительности в проекте, где мы хотели использовать возможности холста, доступные на рабочих станциях с высокими рабочими характеристиками CPU/GPU, а также устройства с более низкой скоростью, такие как таблицы и телефоны.
В основном мы начинаем с минимальной сложности сцены, и если renderloop занимает меньше 33 мс, мы добавляем сложность (мы также уменьшаем сложность, если renderloop начинает принимать слишком долго в более позднее время).
Я полагаю, что в вашем случае вам, возможно, придется выполнить быстрый тест на холст и webgl, а затем выбрать его. Проведя некоторое время, исследуя это, я не сталкивался с какой-то сложной неочевидной техникой, которая решает это лучше.
Ответ 2
Вы можете использовать http://webglstats.com/ для поддержки аппаратного обеспечения и обнаружения функций WebGL.
Ответ 3
Если вы используете three.js, вы можете просто использовать детектор .js, чтобы узнать, включен ли webgl. Кроме того, пребывание в стороне от canvasrenderer поможет. используйте webglrenderer или softwarerender. поскольку они допускают большее количество вершин. softwarerender является довольно новым и нуждается в некоторой работе, но может быть использован.