JavaScript определяет, включено ли аппаратное ускорение

Можно ли определить, есть ли в браузере поддержка аппаратного ускорения рендеринга страниц, и можно ли увидеть, было ли оно включено? Мне известно, что Firefox 4, IE9 и Chrome поддерживают его, но он может включаться или не включаться в зависимости от версии браузера, ОС и самого оборудования компьютера.

Возможно ли это с использованием какой-либо формы DOM сниффинга?

3 ответа

Решение

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

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

В зависимости от того, какой тип производительности вас больше всего интересует, вы можете разработать довольно специфичный для этого тест. Например, если вы сильно заботитесь о масштабировании изображения, вы можете разработать JS-тест, который масштабирует изображение среди множества различных размеров в достаточно большом цикле, чтобы получить измеримое время, а затем решить, каков ваш порог синхронизации.

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

Официального способа это обнаружить не будет. Дело в том, что даже если в браузере установлена ​​настройка аппаратного ускорения (HWA), вы не можете быть уверены, что браузер действительно будет использовать HWA для вашего рендеринга. Ряд обстоятельств может помешать использованию HWA в данный момент, и ваша графика может быть отображена с помощью программного средства рендеринга, даже если HWA обычно поддерживается (в основном это верно для Firefox, но другие браузеры также могут иметь запасные варианты программного рендеринга на случай, когда HWA временно недоступен).

Однако вы можете попробовать отобразить то, что, как вы ожидаете, программный рендерер и рендерер HWA будут визуализировать по-разному, и заставить программный рендерер сравнивать его со стандартным. Canvas 2D API предлагает средство принудительного рендеринга через программный рендерер:, а HWA, как известно, довольно плохо отображает чистые косые изображения.

Но хотя в большинстве случаев это может сработать (работает в моем FF и Chrome на macOS), это, конечно, не является безупречным, поскольку конечная цель — сделать рендереры HWA такими же точными, как и программные, поэтому используйте этот тест с осторожностью.

Недавно я обнаружил удобный переключатель командной строки для Chrome (я использую v. 16.0.912), который приводит к красным границам, нарисованным вокруг элементов HTML (CSS3), которые фактически ускоряются аппаратно. Вы можете прочитать более подробную информацию в блоге, который я опубликовал на эту тему.

Другие вопросы по тегам