Назад в Центр знаний
Отпечатки

navigator.cpuPerformance: уровни и приватность

Значения navigator.cpuPerformance: отсутствие и ноль, поддержка Chrome 152, переопределения и границы приватности уровней CPU.

BotBrowser Team

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

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

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

navigator.cpuPerformance сообщает грубую категорию производительности CPU, а не название процессора, текущую загрузку или подтверждение личности. Chrome 152 перечисляет API среди выпущенных возможностей. Зафиксированный проект WICG определяет четыре положительных уровня и отдельное неизвестное значение 0; отсутствие свойства является другим наблюдением. BotBrowser позволяет настроить документированную поверхность числа ядер, но значение --bot-cores само по себе не может подтвердить поведение этого отдельного свойства. Граница важна, когда отчёт ставит уровень CPU рядом с числом ядер, памятью и временными сигналами.

Смотреть видео

Это видео на английском языке разбирает тот же вопрос, что и статья: возвращаемый navigator.cpuPerformance уровень : это грубая статическая классификация, а не чтение текущей нагрузки. В нём отдельно показаны отсутствующее свойство, числовой ноль, означающий «неизвестно», текущий положительный уровень, нераспознанный будущий уровень и ошибка чтения; затем сопоставление по числу ядер из черновика, зависящая от реализации поправка по модели, полоса проектирования приватности, документированные переопределения Chrome и записанное чтение в Ubuntu Chrome на контролируемом фикстуре. Видео не восстанавливает точное число ядер, модель процессора или результат бенчмарка. Аудио на английском.

Кратко

  • Отсутствие navigator.cpuPerformance, числовой 0 и сообщённый уровень должны оставаться разными состояниями. Недостаток данных не означает низкую производительность.
  • Начальное распределение проекта использует число ядер от ОС и поправки по модели CPU, определяемые реализацией. Уровень не восстанавливает точное число ядер или модель процессора.
  • Статический уровень не следует за текущей загрузкой. Документированные Chrome переопределения пользователя и администратора также не позволяют считать любое значение неизменённым измерением оборудования.
  • Специфицированная область доступности: защищённый контекст Window. Документация Chrome 152 не подтверждает доступность во всех браузерах, встроенных средах и Workers.
  • Грубые категории уменьшают детализацию, но не устраняют аппаратный сигнал. Записям поддержки об уровне CPU не нужны посторонние идентификаторы.

Содержание

Состояния результата до выводов об оборудовании

Зафиксированный проект CPU Performance API расширяет Navigator доступным только для чтения свойством типа unsigned short. В IDL указаны SecureContext и Exposed=Window. Это описание контекста интерфейса, а не таблица совместимости всех установленных браузеров. Прежде чем интерпретировать значение, отчёт должен установить контекст наблюдения.

НаблюдениеЗначение, подтверждаемое источником или сборщикомЧто не установлено
Контекст отклонён проверкой isSecureContextФункция не продолжила сбор в этом контекстеПринадлежность устройства к низкому уровню
Свойство не предоставленоОно отсутствует в проверенном NavigatorПричина отсутствия, средство приватности или модель CPU
Числовой 0API сообщает неизвестную классификациюНоль ядер, отсутствие CPU или ошибка чтения JavaScript
Целое число от 1 до 4Текущий положительный уровень производительностиТочная скорость, идентичность оборудования или текущая загрузка
Положительное целое больше 4Будущий уровень, неизвестный этому потребителюЧто зафиксированный getter возвращает его сейчас
Ошибка чтения или неожиданный типСбор не дал значение ожидаемой формыДопустимая аппаратная классификация

Разница между наличием интерфейса и классификацией сохраняется, даже если панель предпочитает одну краткую метку. Замена и undefined, и 0 на «неизвестно» теряет сведения о доступности интерфейса. Превращение обоих состояний в уровень 1 ещё серьёзнее: оно придумывает оценку производительности, которой браузер не сообщал. Такое преобразование способно исказить сравнение ещё до аппаратных выводов.

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

function readCpuTier() {
  if (!globalThis.isSecureContext) return { state: 'context-skipped' };
  if (!('cpuPerformance' in navigator)) return { state: 'not-exposed' };
  try {
    const tier = navigator.cpuPerformance;
    if (!Number.isInteger(tier) || tier < 0 || tier > 65535) {
      return { state: 'unexpected-value' };
    }
    if (tier === 0) return { state: 'unknown' };
    if (tier <= 4) return { state: 'tier', tier };
    return { state: 'future-tier', tier };
  } catch {
    return { state: 'read-error' };
  }
}

Текущий алгоритм getter утверждает диапазон от 0 до 4, но раздел об уровнях рекомендует учитывать дополнительные категории будущих редакций. Сохранение незнакомого положительного целого обеспечивает совместимость на будущее; оно не утверждает, что существующая реализация выдаёт уровень 5. Приложение может выбрать осторожный режим для такого состояния, однако диагностическая запись не должна незаметно заменять его известной категорией.

Проверка наличия свойства также имеет более узкий смысл, чем проверка подлинности. Наличие cpuPerformance в объекте navigator страницы не устанавливает доверенность окружающей среды JavaScript, а успешное чтение не удостоверяет устройство. Результат проверки возможности нужен для обработки доступности функции. Он не должен превращаться в условие доступа к аккаунту или заявление, будто отчёт доказал, кто работает за компьютером.

Защищённый контекст Window ведёт к отдельным состояниям: свойство отсутствует, неизвестный ноль и положительный уровень; будущие уровни сохраняются отдельно.

Классификация проекта и её границы

Проект начинает с числа ядер, сообщённого операционной системой. Ядром считается физическая или логическая единица исполнения в представлении ОС. Этот вход не определён как число, возвращаемое JavaScript страницы через navigator.hardwareConcurrency. Анализ сообщаемого числа ядер отделяет видимое странице значение от фактического параллелизма. Подстановка значения страницы в таблицу не воспроизводит классификацию браузера на основе системных данных.

Начальный вход от ОС в проектеНачальный уровень
Число ядер недоступно или равно 00
1 ядро1
От 2 до 4 ядер2
От 5 до 10 ядер3
Более 10 ядер4

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

Поэтому обратное соответствие неоднозначно. Уровень 3 может исходить из группы от 5 до 10 ядер, но поправки модели также влияют на классификацию. Даже без них группа из нескольких значений не раскрывает точное число ядер. После поправок выводить единственную модель из итогового целого ещё менее обоснованно. Возвращаемая категория содержит меньше сведений, чем внутренние входы, повлиявшие на её выбор.

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

Проект рекомендует обосновывать поправки производительностью, измеренной подходящими тестами в идеальных условиях. Это правило классификации реализации, а не превращение целого на странице в результат benchmark. У уровня нет опубликованной единицы секунд, операций в секунду или процента загрузки. Деление одного уровня на другой не даёт осмысленного отношения скоростей: уровень 4 нельзя описывать как вдвое более быстрый, чем 2.

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

Статические уровни, динамическая нагрузка и время

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

ПоверхностьНа какой вопрос отвечаетНеверная подмена
navigator.cpuPerformanceКакая грубая статическая категория сообщается?Измеритель текущей загрузки CPU
navigator.hardwareConcurrencyСколько логических процессоров сообщается странице?Точный вход ОС для уровня или идентичность модели
navigator.deviceMemoryКакая приблизительная категория памяти сообщается?Классификация CPU
Compute PressureКакие динамические сведения о давлении предоставляет этот API?Стабильный аппаратный уровень
performance.now()Какие временные метки доступны для измерения?Прямое чтение класса производительности CPU

Различие с динамическим давлением важно для диагностики. Вкладка может замедлиться при неизменном уровне CPU. Это не обязательно противоречие: статическая категория и изменяющаяся задача описывают разные вещи. Анализ адаптации нагрузки через Compute Pressure рассматривает динамическую обратную связь и границы API; он относится к меняющейся нагрузке, а не к смыслу классификации.

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

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

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

Приватность и минимальные записи сравнения

Раздел WICG о приватности описывает намеренно ограниченное раскрытие небольшого целого. Цель состоит в том, чтобы каждому уровню соответствовало много устройств и моделей, включая заявленное намерение охватить не менее 10% существующих моделей и 10% устройств каждым уровнем. Это проектные ориентиры спецификации, а не статистика популяции, получаемая с каждым ответом. Свойство не содержит ни знаменателя, ни аудита фактического соблюдения целей конкретным развёртыванием.

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

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

Поле записи поддержкиНазначениеОграничение сбора
Продукт и существенная для проблемы версия браузераСвязать результат с документированной доступностьюНе заменять достаточную версию полным дампом идентифицирующих заголовков
Контекст Window и решение о его защищённостиОбъяснить продолжение или пропуск сбораОтклонённый контекст не доказывает отсутствие оборудования
Состояние сборщика и уровень при наличииСохранить фактическую форму результатаНе превращать 0 или отсутствие в уровень 1
Проверенное переопределение пользователя или организацииОбъяснить известное различие конфигурацииОставить неизвестным, если проверка не проводилась
Дата наблюдения и существенная редакция источникаОтделить актуальный случай от старой документацииНе добавлять постороннюю историю посещений или идентификаторы аккаунта

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

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

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

Поддержка Chrome и границы управления BotBrowser

Примечания к Chrome 152 перечисляют CPU Performance API и говорят, что пользователи и администраторы могут переопределять сообщаемый уровень через настройки Chrome и корпоративные политики. Это утверждение о реализации Chrome. Алгоритм проекта WICG сам по себе не документирует аналогичные настройки в каждом другом браузере или встраивающем приложении.

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

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

Сравнения с Workers требуют осторожности: зафиксированный IDL доступен в Window и расширяет Navigator, а не WorkerNavigator. Чтение в главном окне с последующей пересылкой в Worker создаёт там значение, переданное приложением; это не демонстрирует нативное свойство Worker. Запись должна указывать контекст исходного чтения, а не объявлять межконтекстное совпадение на основании пересланного сообщения.

Справочник BotBrowser по ядрам CPU описывает navigator.hardwareConcurrency, варианты --bot-cores и ограничения привязки Workers. Поддержка affinity документирована для Linux и Windows; macOS продолжает сообщать настроенное число без такого механизма. Эти сведения касаются конкретной поверхности и ограничения исполнения. Они не документируют перезапись navigator.cpuPerformance профилем или флагом числа ядер.

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

Вопросы

Неизвестный уровень должен отключать все необязательные функции?

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

Уровень может служить удостоверением для авторизации?

API возвращает небольшую категорию производительности, а не подписанное подтверждение полномочий. Chrome также документирует переопределения пользователя и администратора. Решение о допустимости операции требует подходящих доказательств; аппаратная категория их не предоставляет. Превращение её в удостоверение для входа приписало бы значение доверия, не определённое ни типом свойства, ни цитируемой документацией.

Что делать, если будущая спецификация добавит уровень?

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

Стабильный уровень позволяет не датировать сравнение?

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

Источники

Практический вывод

Сначала фиксировать доступность, затем интерпретировать navigator.cpuPerformance. Положительный уровень подходит как грубый исходный вход поведения приложения; 0 нужно отделять от отсутствия свойства, а будущие значения сохранять без выдуманного смысла. Совместимость зависит от реального продукта и контекста Window. Настройка ядер, эталонная эвристика или малодетальный уровень не доказывают идентичность CPU, управление этой отдельной поверхностью продуктом или решение стороннего сервиса.

#fingerprinting#приватность#Navigator#Cpu

Эта статья входит в руководство: Что такое отпечаток браузера?

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

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