機能の利用度合いを測るUseCounter (FeatureObserver)
WebKit絡みの話が続く……
接頭辞のついた実装、レガシーな機能を削除したいときに「それらに依存したコンテンツに影響する」というのが懸念される。こういった理由もあって、WebKitでは接頭辞付きの機能は、接頭辞なしの機能が実装されても基本的に保持されて続けている。
Mozillaは削ることに頑張っていて、-moz-border-radius
や -moz-box-shadow
を始めけっこう削っている。ただ、消したら影響が思ったより大きくて戻したなんてものもある。Node.hasAttributes()
とか、window.mozIndexedDB
とか。
この、機能を削ることができない空気や、機能を削ってもバックアウトされてしまうのは、削りたい機能に依存したページがどれくらいあるかを知る手立てがなかったからなのかなと。
FeatureObserver登場
ここにひとつ進展があったのが2012年の9月。GoogleがWebKitに FeatureObserver
というものを導入した。
- Changeset 128788 – WebKit ― We should make collecting metrics easier by adding an IDL attribute
- [webkit-dev] How to collect usage metrics for deprecated DOM APIs
Step 3: There is no step 3.
ってのがなんかかっこいい。
Chromeには使用統計データをGoogleに送信するオプションがある。これを利用して、FeatureObserver
は登録した機能が使われているページをカウントし、サンプルを取っている。
どんな機能が対象になってるかは、説明するよりファイルを見るのがはやそう(WebKit, Blink)。
成果として、webkitNotifications.createHTMLNotification()
が削除されている。もっとあるかと思ったけど、そうでもなかった。
WebKit接頭辞絡みだと webkitPostMessage
や先日の -apple-
, -khtml-
も削除されているけれど、こちらはとりあえず削ってみたというパターンみたい。
BlinkではUseCounterに
Blinkでは新しい機能に接頭辞つけないというポリシーに加えて、既存のレガシーなものについても、ケースバイケースだけれど削除できるならしようという感じで動いている。いまも、Content Security PolicyのWebKit独自ヘッダ X-WebKit-CSP
の削除について議論されてて、そこでも FeatureObserver
からのデータが挙げられていた。
ただ、“feature observer”といいつつ「機能の監視」をしてるわけではないだろうということから、Blinkでは UseCounter
という名前に改められた。WebKitはそのまま。
モバイルでのStatsは?
気になるのは、モバイル。というのも、まだ環境が整ってないように思うから。
デスクトップ版のChromeはStable ChannelにもUsage statsを送信するオプションがあるはずだけれど、モバイル版Chromeには今のところBeta Channelにしかオプションが用意されていない。モバイル版のBeta ChannelはGoogle Playで検索しても出てこないので、インストールベースもデスクトップ版のBeta Channelに比べて少ないだろう。なによりChromeがICS以降に対してしか提供されていないので、こちらはこれから、ということになりそう。
また、ChromeがWebKitを離れたので、「本物」のWebKitに依存する機能をキャッチできなくなってしまう。FeatureObserver
は他のportでも使えるように整備されたっぽいんだけど、じゃあAppleがSafariで使うかというと、どうかなあ……
一説によるとモバイルのトラフィックの多くをiOSが占めているらしい。となるとAndroidよりもiOSからアクセスできるページのほうも見とかないといけないのではないか。AndroidとiOSでコードを出し分けている可能性も否定できないので。そこまでな状況になってないといいけど。
あと、モバイルWebではなくて(UI)WebViewを使ったモバイルアプリについても知らないといけないのではないか。これは去年のWebKit contributors meetingでAppleが接頭辞の削除に関してみせた消極的な反応のひとつ。アプリはそこで閉じているぶん、プラットフォームべったりのコード、-webkit-
祭りになっててもおかしくない。WebViewにもそういう仕組ができればいいのだろうけれど、どうなんだろうなあ。