Device Memory APIを用いてデバイスのメモリサイズを取得する

背景

Webサービスでは、デバイスの性能毎に軽量版の機能を提供することが有ります。

Google Search、Google Map、Facebookなどではローエンドデバイスでは一部軽量版のページを提供することが有ります。

または、クライアントサイドで何かしらの処理速度などを指標として収集している場合は端末の性能毎に分類・正規化する必要が出てきます。

Device Memory

W3Cでは「Device Memory」という仕様が議論されており、これはデバイスのメモリサイズを取得できる仕組みを提供します。

この仕様では2つの方法が定義されています

なお、サイズはギガバイトで、最も近い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)では値を取得できます。
f:id:ASnoKaze:20171021022152p:plain

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