機能の利用度合いを測るUseCounter (FeatureObserver)

WebKit絡みの話が続く……

接頭辞のついた実装、レガシーな機能を削除したいときに「それらに依存したコンテンツに影響する」というのが懸念される。こういった理由もあって、WebKitでは接頭辞付きの機能は、接頭辞なしの機能が実装されても基本的に保持されて続けている。

Mozillaは削ることに頑張っていて、-moz-border-radius や -moz-box-shadowを始めけっこう削っている。ただ、消したら影響が思ったより大きくて戻したなんてものもある。Node.hasAttributes() とか、window.mozIndexedDB とか。

この、機能を削ることができない空気や、機能を削ってもバックアウトされてしまうのは、削りたい機能に依存したページがどれくらいあるかを知る手立てがなかったからなのかなと。

FeatureObserver登場

ここにひとつ進展があったのが2012年の9月。GoogleWebKitFeatureObserver というものを導入した。

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以降に対してしか提供されていないので、こちらはこれから、ということになりそう。

また、ChromeWebKitを離れたので、「本物」のWebKitに依存する機能をキャッチできなくなってしまう。FeatureObserver他のportでも使えるように整備されたっぽいんだけど、じゃあAppleSafariで使うかというと、どうかなあ……

一説によるとモバイルのトラフィックの多くをiOSが占めているらしい。となるとAndroidよりもiOSからアクセスできるページのほうも見とかないといけないのではないか。AndroidiOSでコードを出し分けている可能性も否定できないので。そこまでな状況になってないといいけど。

あと、モバイルWebではなくて(UI)WebViewを使ったモバイルアプリについても知らないといけないのではないか。これは去年のWebKit contributors meetingAppleが接頭辞の削除に関してみせた消極的な反応のひとつ。アプリはそこで閉じているぶん、プラットフォームべったりのコード、-webkit-祭りになっててもおかしくない。WebViewにもそういう仕組ができればいいのだろうけれど、どうなんだろうなあ。