背景
Webサービスでは、デバイスの性能毎に軽量版の機能を提供することが有ります。
Google Search、Google Map、Facebookなどではローエンドデバイスでは一部軽量版のページを提供することが有ります。
または、クライアントサイドで何かしらの処理速度などを指標として収集している場合は端末の性能毎に分類・正規化する必要が出てきます。
Device Memory
W3Cでは「Device Memory」という仕様が議論されており、これはデバイスのメモリサイズを取得できる仕組みを提供します。
この仕様では2つの方法が定義されています
- JavaScriptから取得する
- HTTPリクエストヘッダで通知する
なお、サイズはギガバイトで、最も近い0.25, 0.5, 0.75, 1, 1.5, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128のいずれかの値を返す事になっています。
JavaScriptから取得する
JavaScriptから下記で取得できます(httpsの場合のみ)。
navigator.deviceMemory
現在Chrome Canary(64.0.3245.0)では値を取得できます。
HTTPリクエストヘッダで通知する
もしくはメモリの情報を通知したいデバイスは、HTTPリクエストで通知することもできます。
「HTTP Client Hints」の仕様に則り
サーバはレスポンスヘッダで、Accept-CHにDevice-Memoryを設定することで、この値をみて適切なコンテンツを提供できる旨クライアントに通知します。
Accept-CH: Device-Memory Accept-CH-Lifetime: 86400
クライアントはDevice-Memoryヘッダで、メモリサイズ(単位はギガバイト)をサーバに通知します。
GET /example HTTP/1.1 Device-Memory: 0.75