Есть ли способ узнать что-либо об аппаратных ресурсах "платформы" для доступа к веб-странице?
Я хотел бы узнать о ресурсах браузера с веб-страницы или, по крайней мере, приблизительную оценку.
Даже если вы обнаружите наличие в браузере современных технологий (например, csstransforms3d
, csstransitions
, requestAnimationFrame
) с помощью инструмента, такого как Modernizr
, вы не можете быть уверены, следует ли активировать некоторую производительность (например, фантастическая 3D-анимация) или чтобы избежать этого.
Я спрашиваю, потому что у меня (много) опыта с ситуациями, когда браузер является современным (последний Chrome или Firefox, поддерживающий все классные технологии), но OS CPU, GPU и доступная память просто катастрофический (32-битная Windows XP со встроенным графическим процессором), и поэтому решение, основанное исключительно на обнаруженных крышках браузеров, не является хорошим.
Ответы
Ответ 1
В общем, доступная (для веб-страниц) информация о пользовательской системе очень ограничена.
Я помню обсуждение добавления одного такого API к веб-платформе (navigator.hardwareConcurrency
- количество доступных ядер), где противники Особенность объяснила причины, против которых, в частности:
- Количество ядер, доступных вашему приложению, зависит от другой рабочей нагрузки, а не только от доступного оборудования. Он не является постоянным, и пользователь может не захотеть, чтобы ваше приложение использовало все (или любую фиксированную часть, которые вы выбрали) из доступных аппаратных ресурсов;
- Помогает "fingerprinting" клиенту.
- Тоже ориентируется на специфику сегодняшнего дня. Веб предназначен для работы на многих устройствах, некоторые из которых даже не существуют сегодня.
Эти аргументы также работают для других API-интерфейсов для запроса конкретных аппаратных ресурсов. Что конкретно вы хотели бы проверить, чтобы узнать, может ли пользовательская система позволить себе "фантазийную 3D-анимацию"?
Как пользователь, я бы предпочел, чтобы вы не использовали дополнительные ресурсы (например, фантазийную 3D-анимацию), если это не обязательно для основной функции вашего сайта/приложения. Мне грустно, что мне приходится покупать новый ноутбук каждые несколько лет, чтобы иметь возможность продолжить мой текущий рабочий процесс, не работая очень медленно из-за нехватки ресурсов HW.
Итак, вот что вы можете сделать:
- Предоставьте резервную ссылку для пользователей, у которых возникают проблемы с "полной" версией сайта.
- Если это достаточно важно для вас, вы можете сначала запустить короткие тесты, чтобы проверить производительность и вернуться к менее ресурсоемкой версии сайта, если вы подозреваете, что система не хватает ресурсов.
- Вы можете настроить таргетинг на конкретные высокопроизводительные платформы, проверив ОС, размер экрана и т.д.
- WebGL предоставляет некоторую информацию о рендерере через
webgl.getParameter()
. См. Эту страницу, например: http://analyticalgraphicsinc.github.io/webglreport/
Ответ 2
В то время как Nickolay дал очень хорошее и обширное объяснение, я хотел бы предложить одно очень простое, но, возможно, эффективное решение - вы могли бы попытаться измерить, сколько времени потребуется для загрузки страницы, и решить, следует ли идти с ресурсом, головоломки или нет (Gmail делает что-то похожее - если загрузка продолжится слишком долго, появится предложение перейти на "базовую HTML-версию" ).
Идея заключается в том, что для медленных компьютеров загрузка любой страницы, независимо от содержимого, должна быть в среднем намного медленнее, чем на современных компьютерах. Получение времени, необходимого для загрузки страницы должно быть простым, но есть несколько замечаний:
- Вам нужно немного поэкспериментировать, чтобы определить, где поставить "слишком медленный" порог.
- Вам нужно иметь в виду, что медленные соединения могут привести к медленной загрузке страницы, но это, вероятно, повлияет на очень небольшое количество случаев (использование DOM, готовое вместо события загрузки, также может помочь здесь).
- Кроме того, в первый раз, когда пользователь загружает ваш сайт, вероятно, будет намного медленнее из-за кэширования. Одним из простых решений для этого является сохранение вашего результата в cookie или локальном хранилище и учет времени загрузки только при первом посещении пользователя.
- Не забывайте всегда, независимо от того, какой механизм обнаружения вы использовали и насколько он точным, разрешите пользователю выбирать между обычной, ресурсоемкой и более быстрой, "уродливой" версией - некоторые люди предпочитают более эффективные эффекты, даже если это означает, что веб-сайт будет медленнее, в то время как другие значения скорости и привязанности больше.