Google Chromeチームはこのたび、Chromium Blog「Chromium Blog: Introducing Shared Memory Versioning to improve slow interactions」において、Chromeに最近導入されたCookieのリクエストを削減する仕組みについて発表した。この仕組みによってCookie関連のメッセージの数が80%削減され、初期のテストでは、すべてのプラットフォームでパフォーマンスが最大5%向上したという。

Cookieアクセスの87%は冗長

Chromeチームによると、遅いインタラクションのフィールドデータをトレースし、一部のWeb サイトがCookieを連続して複数回取得するという非効率的な実装を行っていることを発見したという。そして、この点を集中的に調査した結果、Cookieアクセスの87%は冗長であり、場合によっては1秒間に数百回のリクエストを発生させる可能性があると判明したと報告している。

その原因は、document.cookieを利用する設計がシンプルであったことが裏目に出たと分析している。Cookieを利用するには、JavaScriptでdocument.cookieプロパティを設定/取得するだけでよい。従来のローカルプロパティの用途であればこの設計はうまく動作していた。しかし、Webの標準仕様では連携するドメインが互いのCookieを変更することが許可されているため、複数のWebサイトが同時にリクエストを行うような高負荷なシナリオでは、ネットワーク サービスからCookieを同期的に取得する必要があり、大幅な遅延を引き起こす結果になったという。

Cookieリクエストを大幅削減させた「共有メモリーバージョン管理」

Chromeでは、このボトルネックを解消するために、共有メモリーバージョン管理(Shared Memory Versioning)と呼ばれる新しい仕組みを導入した。これは、document.cookieの最新の値を取得する際に、ネットワークサービスを常にチェックする代わりに、そのバージョン番号と最後の読み取り値を共有メモリにキャッシュするというもの。これによってレンダラーは、ネットワークサービスにリクエストを送信しなくても、最新バージョンのキャッシュがあるかどうかを判断することができる。

  • 共有メモリーバージョン管理によってCookieリクエストが大幅に減少 出典:Chromium Blog

共有メモリーバージョン管理を導入した結果、Cookie関連のプロセス間メッセージは80%削減し、document.cookieへのアクセスは60%高速化されたという。そして、Cookie関連のメッセージを削減したことによるパフォーマンスへの影響を測定し、初期テストではすべてのプラットフォームでパフォーマンスが最大5%改善されたとChromeチームは報告している。