Отпечатки

Device Memory API и производительность веба: подсказка памяти

Что может и чего не может показать navigator.deviceMemory, как постепенно адаптировать ресурсы и соблюдать ограничения приватности.

Документация

Нужна структурированная документация по теме Отпечатки?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

navigator.deviceMemory - приблизительная подсказка, которая помогает веб-приложению выбрать осторожную стратегию ресурсов. Это не инвентаризация RAM, не тест производительности и не основание для идентификации человека. Считайте её необязательным входом, сочетайте с результатами выполнения и сохраняйте рабочий вариант по умолчанию для браузеров без этого свойства.

Постепенная адаптация веб-ресурсов по необязательной подсказке о памяти

Что показывает Device Memory API

Device Memory API предоставляет navigator.deviceMemory - приблизительный объём памяти устройства в гигабайтах. Спецификация W3C описывает намеренно уменьшенное и сгруппированное значение, а не точное измерение. Браузер может округлить или ограничить его до возврата, поэтому код должен воспринимать его как общий намёк на возможности.

Свойство подходит для выбора между заранее подготовленными вариантами ресурсов: отложить большую картинку, уменьшить начальный кэш или выбрать более лёгкую задачу на клиенте. Оно не показывает свободную память в данный момент и не предсказывает успешное завершение страницы. Подсказка также ничего не говорит о квоте хранилища, скорости CPU, качестве сети или предпочтениях пользователя.

Доступность и ограничения

Поддержка не универсальна. MDN называет Navigator.deviceMemory экспериментальной функцией с ограниченной доступностью; браузер может не предоставлять её или показывать только в защищённом контексте. Код должен проверять наличие свойства и работать без него, не считая отсутствие признаком малого объёма памяти.

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

Постепенная адаптация реальных нагрузок

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

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

В руководстве по планированию ёмкости BrowserContext описаны измеряемые бюджеты для длительных браузерных нагрузок. Руководство по возможностям WebGL и приватности показывает такой же подход с запасным вариантом, а сигналы хранилища и памяти в профилях объясняют, почему разные значения ресурсов нельзя смешивать.

Запасные варианты с уважением к приватности

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

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

Используйте подсказку в правильном слое

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

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

Сочетайте возможности и результаты

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

Наблюдайте декодирование изображения, запуск видео, повторы, задержку ввода и восстановление. Эти результаты направляют политику, не превращая подсказку в ярлык.

Сначала спроектируйте базовый путь

Базовый путь должен включать обязательный контент, клавиатурный доступ, читаемый текст и повтор улучшений. Лёгкий вариант может отложить дополнения, но не скрывать единственный способ завершить задачу.

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

Выбирайте устойчивые политики

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

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

Журналы и хранение

Записывайте политику и результат, а не лишнее аппаратное значение. resource_policy=reduced обычно объясняет задержку. Если исходное значение нужно для диагностики, ограничьте доступ и срок и удалите его.

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

Вопросы перед выпуском

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

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

Проверяйте доступность без предположения о семействе браузера

Проверка возможностей должна быть обычной веткой приложения, а не тестом имени браузера. Читайте свойство только при его наличии и сохраняйте базовый вариант при undefined. Защищённый контекст, приватное окно или встроенный фрейм могут изменить доступность независимо от ОС.

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

Отделяйте подсказку памяти от бюджета производительности

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

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

Учитывайте намерение пользователя

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

Дайте видимый способ повторить необязательное улучшение и объясните задержку. Не запрашивайте аппаратное значение только ради меньшей картинки; размер или режим передачи должны быть понятны.

Избегайте связи между сессиями

Самый безопасный вариант - временное использование: прочитайте подсказку для текущей задачи, сохраните только выбранную политику и удалите исходное значение. Не объединяйте его с ID, IP, Canvas, шрифтами или таймингами.

Для поддержки записывайте политику, версию браузера и воспроизводимую нагрузку, а не группу памяти. Агрегированные отчёты позволяют сравнивать политики без отслеживания человека.

Планируйте изменения и восстановление

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

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

Описывайте публичную границу

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

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

Проверка должна охватывать отказ каждого необязательного ресурса: отменённая картинка сохраняет текст, недоступный worker даёт основной путь, а отсутствие кэша использует ограниченные запросы. Подсказка не видит временное давление и другие вкладки. Небольшие сценарии должны проверять загрузку, возврат, переходы, прерванную передачу и закрытие. Записывайте завершение, отмену, задержку и восстановление без содержимого и идентификаторов. Так политики улучшаются без превращения Device Memory API в профиль оборудования.

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

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

В производственной проверке также зафиксируйте, какой запасной вариант показан при отсутствии подсказки и может ли человек продолжить работу без изменения настройки. Так решение API связывается с реальным опытом: уменьшенное изображение, отложенный просмотр или меньшее число workers должны оставаться понятными и обратимыми. Такие поведенческие данные полезнее сохранённой аппаратной группы и упрощают повторную проверку после обновления.

Если серверу нужно объяснить выбор, записывайте только краткое имя политики и результат задачи. Не отправляйте подсказку как атрибут аккаунта: возможность отката и диагностики сохранится, а разовое решение совместимости не превратится в межсессионный профиль.

Практический список решений

  1. Проверьте navigator.deviceMemory; никогда не предполагайте его наличие.
  2. Определите базовый вариант, не зависящий от подсказки.
  3. Используйте широкие обратимые варианты ресурсов, а не ярлыки устройств.
  4. Измеряйте результаты задачи и меняйте бюджеты по наблюдаемым сбоям.
  5. Не помещайте значение в идентификаторы, журналы и удалённые запросы, если пользователь не понимает цель.

Источники

#Device Memory API#Производительность Веба#Прогрессивное Улучшение#Приватность

Переведите BotBrowser из исследований в продакшн

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