Пропустить код, если компьютер работает медленно - PullRequest
12 голосов
/ 29 июня 2009

Есть ли способ обнаружить, если компьютер работает медленно и не запускает какой-либо код (либо отключив анимацию jQuery, либо просто запустив функцию, если она работает быстро)?

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

Обновление:
Код, который я пытаюсь запустить, представляет собой просто набор анимаций; все они занимают одинаковое количество времени, но в более медленных браузерах анимация сегментирована так, как вы видите, когда смотрите видео, которое буферизируется.

Ответы [ 6 ]

11 голосов
/ 29 июня 2009

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

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

7 голосов
/ 29 июня 2009

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

var start = new Date();
//... some jQuery animation
var end = new Date();
var diff = end - start;

Тогда, например, если анимация занимает 1,5 секунды, а разница во времени равна 5 секундам, отключите все оставшиеся анимации.

5 голосов
/ 29 июня 2009

я думаю, что есть два варианта:

  1. Пусть пользователь решит - предоставит пользователю опцию «низкая пропускная способность / низкая спецификация», которая при нажатии отобразит более простую версию сайта.

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

Надеюсь, это даст вам некоторые идеи.

Джош

1 голос
/ 29 июня 2009

Я хотел бы отметить, что если вы собираетесь оставить это на усмотрение пользователя (что я считаю хорошей идеей), вы должны дать понять, что вы спрашиваете о скорости компьютера, а не о скорости соединения или пропускной способности , У пользователя может быть очень быстрый ноутбук, но он работает с медленным общедоступным Wi-Fi-соединением или наоборот. Поскольку Javascript на стороне клиента, важна только скорость компьютера.

0 голосов
/ 29 июня 2009

Я предполагаю, что выполнение кода, который вы хотите отключить, занимает значительное время.

Я предлагаю вам:

  • Начните выполнять этот код
  • После того, как он будет частично выполнен, посмотрите, сколько времени прошло в реальном времени
  • Если истекло слишком много времени в реальном времени (то есть, если код выполняется слишком медленно), тогда отмените выполнение вместо его завершения.
0 голосов
/ 29 июня 2009

Учитывая, что JavaScript работает в среде с частичным доверием, я думаю, вы не сможете получить какую-либо информацию на уровне ОС.

Лучшее, что вы можете сделать на самом деле, это проверить «отзывчивость». Возможный подход заключается в том, чтобы просто начать воспроизведение полной анимации и обнаружить задержку, сравнивая целевую частоту кадров с «реальной» частотой кадров. Затем можно просто пропустить биты анимации (кода), чтобы сократить время вычислений и, таким образом, соответственно улучшить скорость отклика / частоту кадров. По сути, именно столько настольных игр обнаруживают лаги и, следовательно, снижают сложность анимации. Я не могу гарантировать, что он будет одинаково хорошо работать в браузере с JavaScript, но стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...