Подтвердить что ты не робот

Обнаруживать производительность видеокарты - JS

Это длинный снимок - есть ли все-таки, чтобы обнаружить плохую и сильную производительность видеокарты через JS-плагин?

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

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

Любые идеи?

4b9b3361

Ответ 1

requestAnimationFrame (rAF) может помочь с этим.

Вы можете узнать свою частоту кадров, используя rAF. Подробности об этом здесь: рассчитать FPS в Canvas с помощью requestAnimationFrame. Короче говоря, вы определяете разницу во времени между кадрами, затем делите 1 на нее (например, 1/.0159s ~ = 62 кадра в секунду).

Примечание: с любым выбранным вами методом производительность будет произвольно решена. Возможно, что-то более 24 кадров в секунду можно считать "высокой производительностью".

Ответ 2

Почему бы не позволить пользователю решить? Youtube (и многие другие сайты для обмена видео) реализует селектор качества воспроизведения, теперь значок шестеренки со списком разрешений, который вы можете выбрать. Будет ли такой HD | SD или Hi-Fi | Lo-Fi Селектор работает (или даже имеет смысл) в контексте вашего приложения?

Ответ 3

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

В основном вы использовали бы то, что упомянуто для этого jcage, тестирование частоты кадров (т.е. использование setInterval в сочетании с таймером). Это не всегда на 100% надежнее, потому что, если их машина решает в этом случае сделать тройной спираль-назад-сальто (или что-то более вероятно), вы получите хитрое чтение. В зависимости от анимации возможно обновление и понижение эффектов в режиме реального времени; но это всегда более сложно для кода, плюс ваш собственный анализ ситуации может иногда приводить к снижению производительности.

Ответ 4

В Firefox есть встроенный список графических карт, которые не поддерживаются: https://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers связанный help acr.

Но вы можете косвенно тестировать их при доступе к функциям WebGL...

http://get.webgl.org/troubleshooting/ приводит к соответствующему провайдеру браузера при возникновении проблем. При проверке кода JS вы увидите, что они проверяют через

if (window.WebGLRenderingContext) {
    alert('Your browser does not support WebGL');
}

если у вас есть обновленная графическая карта.

Ответ 5

Возможно, вы захотите проверить, поддерживает ли браузер window.requestAnimationFrame, что указывает на то, что вы работаете в более новом браузере. Или, альтернативно, рассмотрите проверку jQuery.fx.interval.

Затем вы можете реализовать пользовательскую функцию для оценки доступной вычислительной мощности. Вы можете попробовать использовать пользовательскую функцию ослабления, которая затем может быть запущена с помощью функции . SlideDown(), чтобы получить представление о мощности вычислений.

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

Ответ 6

Если браузер ультрасовременен и поддерживает requestAnimationFrame, вы можете рассчитать частоту кадров анимации в реальном времени и отказаться от настроек анимации для более медленных машин. Это IE 10, Firefox 4, Chrome 10 и Safari 6.

Вы по существу создали бы функцию "tick", которая запускается на обратном вызове requestAnimationFrame() и отслеживает, сколько миллисекунд проходит между каждым тиком. После того, как было зарегистрировано так много тиков, вы можете оценить его общую частоту кадров. Но есть два оговорки:

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

  • Просто наличие указателя JavaScript, работающего на каждом кадре анимации, приведет к замедлению общей анимации; нет способа измерить что-то подобное без негативного воздействия на него. Помните, Гейзенберг ублюдок.

Для старых браузеров я не знаю, как можно надежно измерить частоту кадров. Вы можете смоделировать его с помощью setTimeout(), но это будет не так точно - и может оказать еще более негативное влияние на производительность.

Ответ 7

Это может быть решение на основе риска/выгоды. Я думаю, что вам нужно будет сделать важное, но жесткое решение.

1) Если вы решите иметь два варианта, вам придется потратить некоторое время на:

  • выяснить быстрый, неинтрузивный тест
  • тратить время на выполнение этого
  • сверните его в производство

и вы, скорее всего, закончите с неправильной реализацией, например, на данный момент мой компьютер работает с 70 хромированными вкладками, VLC с анизотроном 1080p и IntellijIDEA

Вероятность того, что моя модель MBP, 2012 будет обнаружена как "медленный" компьютер, высока, по крайней мере сейчас.

Ложные срабатывания действительно трудно понять.

2) Если вы идете на одну версию, вам придется выбирать между HD и Lo-Fi, как упоминал @Patrick, что опять-таки ошибочно на мой взгляд.

Что я буду предлагать, так это то, что вы переходите в Google Analytics, выясняете распределение браузера (да, я знаю, что это может ввести в заблуждение, но так же может и любой другой тест) и на основе этого (если большинство пользователей Chrome + modern IE/FF идет с версией HD, НО потратьте некоторое время на разработку стратегии оптимизации.

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

3) Если из дистрибутива браузера вы выяснили, что вам абсолютно необходимо пойти с версией Lo-Fi, попробуйте подумать, что это "понижение" стоит того, и реализовать его, только если это ваше последнее средство.