Chrome 52 ベータ版: CSS Containment、よりシンプルなパフォーマンス評価、Service Worker からのレスポンスのストリーミング、豊富な Web Push オプション
2016年7月1日金曜日
[この記事は Shubhie Panicker、Performance Powerhouse による Chromium Blog の記事 "Chrome 52 Beta: CSS containment, simpler performance measurement, streamable responses from service workers, and more options for web push" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
特に記載のない限り、下記の変更は Android、Chrome OS、Linux、Mac、Windows 向けの最新の Chrome ベータ版に適用されます。
今回のリリースの新機能として提供される CSS containプロパティを使えば、デベロッパーは、子要素が範囲外に表示されることを防止することができます。要素が更新された場合に、Chrome は親ノードの範囲外の要素をすべて無視できるため、レンダリングにかかる時間を短縮することができます。
特に記載のない限り、下記の変更は Android、Chrome OS、Linux、Mac、Windows 向けの最新の Chrome ベータ版に適用されます。
CSS Containment
リッチでインタラクティブなエクスペリエンスはウェブの要ですが、その複雑さのためにレンダリングに長い時間がかかる場合があります。現在 Chrome では、ヒューリスティックを利用し、ページの変更箇所を特定することで、レンダリングの性能を向上しています。ページ全体を 1 秒に 60 回レンダリングするのではなく、変更箇所のみが更新されます。しかし、要素は親要素の範囲を超えて表示される可能性があるので、ある要素への変更は、同ドキュメント内のあらゆる要素に影響する場合があります。そのため、レンダリング実行中に Chrome が考慮しなければならない要素の数が大幅に増加します。今回のリリースの新機能として提供される CSS containプロパティを使えば、デベロッパーは、子要素が範囲外に表示されることを防止することができます。要素が更新された場合に、Chrome は親ノードの範囲外の要素をすべて無視できるため、レンダリングにかかる時間を短縮することができます。
Performance Observer
正確な RUM(real-user measurement)データの収集は、サイトのユーザー エクスペリエンスを損なうようなパフォーマンスの問題や低下を検知する上で非常に重要です。Chrome の DevTools で、ローカルサイトのテストは実施できますが、多種多様なデバイスを使う現実のユーザーに対するサイトのパフォーマンスを測定することは容易ではありません。Chrome の最新バージョンでサポートされる Performance Observer API を使えば、動作中の RUM データを簡単、効率的に収集することができます。更新に対するポーリングの代わりに、各サイトが興味のあるメトリクスを指定することが可能です。該当メトリクスのデータポイントが新たに利用可能となると、ブラウザがその旨をサイトに通知します。ReadableStreams による Service Worker のレスポンス向上
HTTP レスポンスをストリーミングすることで、ブラウザは、データ量の大きな HTML ドキュメントを、レスポンス全体が利用可能となる前に順次レンダリングすることができます。最新バージョンの Chrome では、ストリーミングのサポートを追加することにより、Service Workder の動作を向上します。サイトは、Response コンストラクタに ReadableStream を渡すことにより、Streams API を使ってストリーミング可能な Response オブジェクトを構築できます。
オフライン Wikipedia クライアントで Readable Streams による速度向上を確認できます。
Web Push プロトコルと VAPID のサポート
プッシュ通知は、ウェブアプリとの関わり方を新たなレベルに押し上げましたが、これまでデベロッパーは、異なるブラウザに対し異なる API と特定のプッシュ メッセージ配信サービスを使う必要がありました。Chrome は今回のリリースで、プッシュ サービスを提供するサイトのサーバーを認証するための標準である VAPID のサポートを開始しました。VAPID を使うと、サイトに Firebase Cloud Messaging エンドポイントが与えられ、これにより、異なるブラウザ間の Web Push プロトコルがサポートされます。今回のリリースに追加されたその他の機能
- モーダル ダイアログ ボックス表示中のアニメーション停止
- HTTP 代替サービスにより、サイトが特定のリソースに達するために使われるオリジンを追加で指定可能。これにより、プロトコルのアップグレードおよび負荷バランスの均等化がより簡単に
- ImageBitmapOptions を使って構築に関する設定を指定できるため、ImageBitmaps の作成がより簡単に
- ImageBitmap.close() を使うことで、ImageBitmap が占めていたメモリ領域を別の用途に利用可能に
- OpenType スモールキャピタルや数字のスタイリングを新たにサポート。font-variant-caps、font-variant-numeric プロパティが使用可能に
- クロスオリジン iframe 内の タッチ ジェスチャ がタップ操作に対応しない限りポップアップを表示しなくなったため、スクロール中の意図しないポップアップ表示を防止
- Android 向け Chrome では、セキュアな Cookie の作成および削除をセキュアなオリジンのみに制限
- 最新バージョンは -webkit-appearance:none をサポートしており、HTML5 の meter 要素のデフォルト レンダリングが無効化され、カスタム CSS スタイリングがより簡単に
- コンテンツ セキュリティ ポリシーのエクスプレッション unsafe-dynamic により、サイトがシングルユースまたはハッシュベースのホワイトリストを用いてスクリプトのソースを確認でき、クロスオリジンのスクリプト攻撃に対する防御が容易に
- Fetch API を利用し、requestに応じたリファラ ポリシーのプログラム設定が可能に
- CanvasRenderingContext2D が filter 属性をサポートしているため、キャンバスに描かれたプリミティブにエフェクトを適用可に
- IDBKeyRange.includes() を利用し、IDBKeyRange の範囲内にキーが存在するかのテストが実行可能に
- HTMLMediaElement.srcObject 属性により、MediaStream とメディアコンテンツとの関連付けが容易に
- AudioParam が、読み取り専用の min および max 属性をサポートするため、イントロスペクションが容易に
- RTCCertificates を IndexedDB に格納可能
- PannerNode と AudioListener が自動化メソッドをサポートするため、スムーズなオーディオ切り替えが可能
- Stylesheets による色のアルファ値の指定が、冗長な rgba() シンタックスではなく、8 ビットおよび 4 ビットの 16 進数を使って実行可能に
- サイトが、オリジン トライアルとして永続ストレージの実験を実行でき、ブックマーク時のストレージ自動クリアの無効化が可能に
- マルチプル WebVTT トラックが、デフォルトのメディア コントロールにおいてユーザー オプションとして表示されるため、キャプションおよびサブタイトルの言語選択が可能に
- postMessage(message,transferables,targetOrigin) の形での postMessage のオーバーライドを廃止
- MediaStream の ended イベントと、それに対応する onended 属性を廃止
- ウェブ アプリ マニフェストの icons エントリによる、density プロパティのサポートを停止
- DynamicsCompressorNode.reduction 属性が、AudioParam ではなく読み取り専用フロートに
- flexbox の子要素で、position:absolute と指定している場合、両端揃えに配置。ただし、要素の left:、right:、top:、bottom: の位置が指定されている場合を除く
- 利用数が少ないため、requestAutocomplete() の廃止および削除を実施
- よりセキュアな実装をサポートするため、meta タグ上での X-Frame-Option のサポートを終了
- より古いユーザー エージェントにおけるメディア ビヘイビアを向上するため、track-kind の無効値は subtitles ではなく metadata として処理
Posted by Eiji Kitamura - Developer Relations Team