1. 소개
이 절은 비규범적이다.
사용자 기기가 얼마나 강력한지에 따라 웹 콘텐츠를 조정하려는 개발자의 관심은 늘 존재해 왔다. 예를 들어, 화상 회의 애플리케이션이나 비디오 게임은 고급 비디오 효과를 렌더링할 수 있는지 결정하기 위해 이 정보를 사용할 수 있으며, 모든 유형의 애플리케이션은 AI 작업을 로컬에서 실행할지 아니면 서버에 위임할지 등을 결정하는 데 사용할 수 있다.
특히, 웹 애플리케이션은 성능 정보를 다음과 같은 용도로 사용하려 할 수 있다.
-
비필수 작업과 요청을 제어한다. 예를 들어, 서드 파티 스크립트를 허용하거나 차단하고, 무거운 라이브러리를 사용하거나 피한다.
-
웹 콘텐츠의 복잡도를 조정한다. 예를 들어, 이미지와 비디오의 해상도 및 형식, 데이터 업로드 시 압축 수준, 애니메이션과 같이 계산량이 많은 작업의 활성화 또는 비활성화, 리소스 관리 개선(지연 로딩, 프리페칭, 프리렌더링) 등을 조정한다.
-
실제 사용자 모니터링을 개선한다. 예를 들어, 사용자가 더 빠른 기기 또는 더 느린 기기를 사용하는지 더 잘 이해하고, 개발 노력을 더 적절하게 집중한다.
-
클라이언트 측과 서버 측 중 어디에서 계산을 실행할지 결정한다. 예를 들어, 서버 측 렌더링을 사용하거나, AI 애플리케이션과 LLM을 클라이언트 측에서 실행한다.
-
사용자 기기에 더 적합한 광고를 선택한다.
2. CPU 성능
현대의 컴퓨팅 기기는 그 성격과 기능이 서로 다른 여러 이기종 처리 장치를 통합하는 경우가 많다. 중앙 처리 장치(CPU)는 모든 컴퓨팅 기기의 핵심 구성 요소이다. 현대의 컴퓨팅 기기는 여러 개의 집적 회로(멀티코어 프로세서)를 포함하며, 각 회로에는 독립적인 CPU처럼 동작하는 여러 개의 물리 코어가 포함된다. 또한 동시 멀티스레딩(또는 하이퍼스레딩) 기술은 물리 코어가 여러 명령어 스레드를 처리할 수 있게 하여, 운영 체제에는 여러 개의 별도 논리 코어처럼 보이게 한다.
CPU 외에도 현대의 컴퓨터는 다음과 같은 다른 유형의 처리 장치를 포함할 수 있다.
-
복잡한 그래픽, 비디오, 과학 시뮬레이션과 AI 학습처럼 병렬 처리가 필요한 계산 집약적 작업을 처리하는 그래픽 처리 장치(GPU);
-
AI 및 머신러닝 작업의 성능을 개선하는 신경망 처리 장치(NPU) 또는 텐서 처리 장치(TPU);
-
신호의 실시간 처리를 최적화하는 디지털 신호 처리기(DSP);
-
재구성 가능하고 프로그래밍 가능한 하드웨어로 구현된 사용자 지정 가속기를 통해 특정 작업을 최적화하는 필드 프로그래머블 게이트 어레이(FPGA) 등.
이 명세는 현재 중앙 처리 장치만을 다루며, 그 성능을 측정한 값을 웹 애플리케이션에 노출하는 것을 목표로 한다. 이 명세의 향후 버전에서는 다른 유형의 처리 장치도 다룰 수 있다.
컴퓨팅 장치에 포함된 중앙 처리 장치의 집합을 가리키는 용어로 CPU를 사용한다. 운영 체제에서 보고하는 바에 따라 명령어 스레드를 실행할 수 있는 CPU의 일부를 가리키는 용어로 코어를 사용하며, 이는 물리적 또는 논리적일 수 있다.
웹 애플리케이션의 관점에서 CPU가 얼마나 빠르게 인식되는지를 가리키는 용어로 성능을 사용한다. 빠른 CPU는 작업을 더 빠르게 처리하며, 예를 들어 애플리케이션 로딩 속도를 높이고, 더 나은 멀티태스킹과 더 부드러운 게임 실행 등을 가능하게 한다.
3. 성능 계층
CPU Performance API는 사용자 기기를 그 CPU 성능에 따라 소수의 성능 계층으로 분류한다. 각 성능 계층은 작은 양의 정수로 표현된다. 값이 높을수록 더 높은 성능 계층, 즉 더 강력한 사용자 기기에 해당한다.
서로 다른 네 개의 성능 계층이 있으며, 1–4로 번호가 매겨진다. 이 API를 사용하는 애플리케이션은 시간이 지남에 따라 기기가 개선되면서 향후 추가될 가능성이 있는 추가 계층(5 이상 번호)를 처리해야 한다.
특수 값 0(영)은 알 수 없는 성능 계층에 해당하며, API 구현이 사용자 기기를 분류할 수 없는 경우 반환된다.
3.1. 성능 계층 값 계산
참고: 구현은 CPU 모델이 해당 코어 수에서 일반적으로 기대되는 것보다 현저히 더 우수하거나 낮은 성능을 보이는 것으로 알려진 경우, 반환되는 성능 등급을 조정할 수 있다. 이러한 조정은 일반적으로 성능 등급을 한 등급 수준 이내(즉, +1 또는 −1)로 변경하며, 운영 체제로부터 CPU 모델에 대한 신뢰할 수 있는 정보를 얻을 수 있어야 한다. 이러한 조정이 적용되는 CPU 모델 집합은 구현에서 정의한다.
참고: 이 알고리즘의 JavaScript 참조 구현은 Chromium 브라우저 엔진의 구현에서 파생된 대표적인 모델 기반 조정 집합을 포함하여 cpu-performance 저장소에서 사용할 수 있으며, 알고리즘과 모델 기반 휴리스틱이 다양한 실제 기기를 어떻게 분류하는지 보여 주는 대화형 데모 페이지도 함께 제공된다. 이는 규범적이지 않으며, 모델 기반 조정을 적용한 이 절의 알고리즘에 대한 권장 구현을 나타낸다.
이 API의 구현은 다음 규칙도 준수해야 한다:
-
일관성: 성능 등급에 대한 모든 모델 기반 조정은 특정 벤치마크로 측정할 수 있는 CPU 성능을 반영해야 하며, 이상적으로는 브라우저가 제공하는 프로그래밍 도구 (JavaScript, WebAssembly 등)를 사용하여 이상적인 조건에서 측정해야 한다. 더 강력한 기기가 덜 강력한 기기보다 더 낮은 성능 등급으로 분류되어서는 안 된다.
-
재현성: 구현은 동일한 사용자 기기에 대해 항상 동일한 성능 등급을 보고해야 한다. 특히:
-
보고되는 성능 등급은 사용자 기기의 현재 부하나 사용률에 따라 달라져서는 안 된다. 그리고
-
구현은 등급을 재정의해서는 안 된다. 즉, 기술이 발전함에 따라 더 새롭고 성능이 높은 기기를 수용하기 위해 등급 4 기기를 등급 3으로 재분류해서는 안 된다. 대신 필요성이 발생하면 이러한 최신 기기를 위해 새로운 등급 5가 이 명세에 추가되고, 이후에는 등급 6 등이 추가된다.
참고: 이 규칙의 의도는 이 API 구현의 분류 오류를 수정하지 못하게 하려는 것이 아니다. 그러한 오류는 필연적으로 수정해야 한다. 오히려 이 규칙의 의도는 새로운 기술이 등장할 때 CPU 모델을 재분류하지 않음으로써, 오래된 애플리케이션을 실행하는 오래된 기기의 동작을 깨뜨리지 않는 데 있다.
-
-
사용자 개인정보 보호: 사용자 핑거프린팅을 방지하기 위해, 구현은 각 성능 등급에 상당히 많은 수의 사용자 기기가 포함되도록 해야 한다(§ 5 보안 및 개인정보 보호 고려사항도 참조). 특히, 모델 기반 조정은 각 성능 등급에 여전히 서로 다른 많은 CPU 모델이 포함될 만큼 충분히 거칠어야 하며, 특수 값 0은 구현이 운영 체제로부터 코어 수에 관한 정보를 얻을 수 없는 경우에만 반환해야 한다.
4. JavaScript API
[
SecureContext ,
Exposed =Window
] partial interface Navigator {
readonly attribute unsigned short cpuPerformance ;
};
cpuPerformance getter
단계는 다음과 같다:
-
tier를 기기의 CPU의 성능 등급을 계산한 결과로 설정하며, 필요에 따라 § 3.1 성능 등급 값 계산에 설명된 모델 기반 조정을 적용한다.
-
단언: 0 ≤ tier ≤ 4.
-
tier를 반환한다.
5. 보안 및 개인정보 보호 고려 사항
CPU Performance API는 HTTPS 보안 컨텍스트에서만 사용할 수 있다.
핑거프린팅 위험을 줄이기 위해 CPU Performance API는 CPU 특성을 직접 노출하지 않는다. 보고되는 값은 CPU에 해당하는 성능 등급을 나타내는 작은 정수이다. 가능한 각 값(등급)에 대해, 구현은 임의의 특정 시점에 인터넷에 존재하는 컴퓨팅 장치 중 절대적인 수와 서로 다른 CPU 모델 수 모두에서 상당히 많은 수가 이 성능 등급을 갖는 것으로 분류되도록 해야 한다. 특히 이 명세의 의도는 각 성능 등급에 기존 CPU 모델의 10% 이상, 그리고 임의의 특정 시점에 존재하는 사용자 기기의 10% 이상이 포함되도록 하는 것이다.
TAG 보안/개인정보 보호 설문지도 참조하라.
6. 예제
이 절은 비규범적이다.
화상 회의 애플리케이션은 네 가지 성능 등급을 다음과 같이 해석할 수 있다. 이 해석은 애플리케이션에 따라 달라지며, 그렇더라도 향후 애플리케이션 자체가 업데이트되고 해당 하드웨어 요구 사항이 변경되면 업데이트해야 할 수 있다.
-
1: 화상 통화에 사실상 사용할 수 없는 기기;
-
2: 성능이 부족하지만 화상 통화에는 여전히 충분히 적합한 기기;
-
3: 화상 통화를 여유롭게 처리할 수 있는 기기; 그리고
-
4: 가장 까다로운 시나리오도 실행할 수 있으며 멀티태스킹을 위한 성능 여유도 있는 기기.
이러한 애플리케이션은 navigator.cpuPerformance 값을 사용하여
사용자 기기의 성능
등급에서 가장 잘 지원되는 여러 기능을 미리 선택할 수 있다.
function getPresetFeatures() { switch ( navigator. cpuPerformance) { case 1 : return { videoQuality: 'QVGA' , frameRate: 15 , effects: [], }; case 2 : return { videoQuality: 'VGA' , frameRate: 15 , effects: [ 'voice-detection' , 'animated-reactions' ], }; case 3 : return { videoQuality: '720p' , frameRate: 30 , effects: [ 'voice-detection' , 'animated-reactions' , 'noise-reduction' ], }; case 4 : case 0 : // 알 수 없는 기기에 대해 고성능 설정을 가정한다 default : // 그리고 4보다 높은 성능 등급에도 적용한다. return { videoQuality: '1080p' , frameRate: 30 , effects: [ 'voice-detection' , 'animated-reactions' , 'noise-reduction' , 'virtual-background' ], }; } }
7. 감사의 말
소중한 피드백과 조언을 주신 다음 분들께 깊이 감사드린다: Dominic Farolino, Deepti Gandluri, Reilly Grant, Tomas Gunnarsson, Markus Handell, Michael Lippautz, Thomas Nattestad, Nicola Tommasi, Guido Urdaneta, Måns Vestin, and Chen Xing.
W3C Web Performance Working Group(WebPerf), 특히 Yoav Weiss에게 감사드린다.