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

Какой лучший способ определить во время выполнения, если браузер слишком медленный, чтобы изящно обрабатывать сложные JavaScript/CSS?

Я играю с идеей постепенного включения/отключения эффектов JavaScript (и CSS) на странице - в зависимости от того, насколько быстро/медленнее выглядит браузер.

Я специально задумываюсь о маломощных мобильных устройствах и старых настольных компьютерах - не просто IE6: -)

Есть ли примеры такого рода вещей?

Каковы были бы лучшие способы измерения этого - учет вещей, таких как временное замедление на занятых CPU?

Примечания:

  • Меня не интересует обнаружение браузера/ОС.
  • На данный момент меня не интересуют измерения полосы пропускания - только производительность браузера/процессора.
  • Вещи, которые могут быть интересны для измерения:
    • Базовый JavaScript
    • манипуляции с DOM
    • DOM/CSS-рендеринг
  • Я хотел бы сделать это таким образом, который влияет на скорость рендеринга страницы как можно меньше.

BTW: Чтобы не путать/раздражать пользователей с непоследовательным поведением - это, конечно же, потребовало бы на экране уведомлений, чтобы пользователи могли выбирать/исключать весь этот процесс настройки производительности.

[ Обновить: есть связанный с этим вопрос, который я пропустил: Отключить функцию JavaScript, основанную на производительности компьютера пользователя. Спасибо Andrioid!]

4b9b3361

Ответ 1

Некоторые идеи:

  • Полагая предельный срок для тестов, кажется очевидным выбором.
  • Сохранение результатов теста в файле cookie также кажется очевидным.
  • Плохая тестовая производительность при тестировании может приостановить дальнейшие сценарии
    • и триггерное отображение пользовательского интерфейса без блокировки (например, подсказки для сохранения пароля, распространенные в современных веб-браузерах).
    • который запрашивает у пользователя, хотят ли они выбрать дополнительные эффекты для сценариев, и сохранить ответ в файле cookie.
    • пока пользователь не ответил на приглашение, затем периодически повторяйте тесты и автоматически принимайте приглашение к скрипту, если последовательные тесты заканчиваются быстрее первого. .
  • На боковой панели - возможно, вероятно, будут также проверены медленные скорости сети
    • путем синхронизации загрузки внешних ресурсов (например, страниц собственных CSS или файлов JavaScript)
    • и сравнивая этот результат с результатами теста JavaScript.
    • это может быть полезно на сайтах, основанных на нагрузках XHR-эффектов и/или интенсивном использовании <img/> s.
      .
  • Кажется, что тесты DOM-рендеринга/манипуляции трудно выполнить до того, как страница начала визуализироваться - и, таким образом, они могут вызвать довольно заметные задержки для всех пользователей.

Ответ 2

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

Есть несколько причин для этого, основными из которых являются:

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

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

  • Даже если вы можете это сделать, у каждого браузера есть свои сильные и слабые стороны, а это означает, что вам нужно будет проверить каждую функцию манипуляции с dom, чтобы узнать, как быстро браузер выполнит ее, нет "общего" "или" средний ", что имеет смысл здесь в моем опыте, и даже если бы это было так, скорость, с которой выполняются команды манипуляции dom, основывается на контексте того, что сейчас находится в dom, которое изменяется, когда вы манипулируете им.

Лучшее, что вы можете сделать, это либо

  • Пусть ваши пользователи решат, что они хотят, и позволяют им легко изменить это решение, если они сожалеют об этом

    или еще лучше

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

Взгляните на некоторые из тестов Google (с защитой авторских прав!) для V8:

Я выбрал пару более простых, чтобы дать представление о подобных тестах, которые вы могли бы создать для тестирования наборов функций. Пока вы сохраняете время выполнения ваших тестов между временем, зарегистрированным в начале и до конца, заканчивающимся до конца, до менее 100 мс в самых медленных системах (которые эти тесты Google значительно больше), вы должны получить необходимую информацию без нанося ущерб пользователю. В то время как ориентиры Google заботятся о детализации между более быстрыми системами, вы этого не делаете. Все, что вам нужно знать, это то, какие системы занимают больше времени, чем XX ms для завершения.

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

Ответ 6

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