Object.observeのGoogle Chromeでの先行実装とAngularについて
読みました。
https://twitter.com/agektmr/status/519128909695045633
僕の中で、Object.observe なんてどうみてもangularのためじゃんって雰囲気が最初からあって、あまりにも当前だと思っていたので、さも事実のように書いてしまってました。 実際に検索してみたところ、その関係に実際に言及するような資料は発見できませんでした。この点は僕の想像でした。申し訳ありません。
ですが、検索すると僕以外にも多くの人がそう思っており、それなりに根拠もあります。なぜそう思っていたのか、その理由を提示します。
2012/06
Angularの公開リリース
2012/11
Object.observeの仕様の初出 http://wiki.ecmascript.org/doku.php?id=harmony:observe&rev=1348241079
(es wikiにまとまったのがこの時期で、Draftの提案はもうちょっと早い時期のはず)
2013/04 あたり
Object.observe が ES6 の仕様から外れてES7以降へ延期
ES6,ES7,ES8 and beyond. A Proposed Roadmap.
↑が直接的なソースかはわからないが、少なくともこの記事の前後には現行のES6には不採用に
2014/03
AngularJS: AngularJS 2.0 で Angular2.0は Object.observe 前提なデザインで動くようにするとのこと
この時、延期されたはずの非標準APIに依存するのはあまりに危険なのでは?という意見が多かった
2014/07/16
Chrome 36で、Object.observeをデフォルトで有効化
ちなみにV8のみの先行実装で、他のブラウザは一切追従してない。 ECMAScript 7 compatibility table
先のAngular2.0に歩調を合わせたかのように見える
何が問題か
Object.observe が動くこと自体は何も問題はない。僕も心待ちにしていた。 問題は、V8 の先行実装で他のブラウザで動かない、Chromeの独断専行に見えるのが基本的にまずい。
API利用者としては、あくまでObject.observeはChromeのみの機能であって、他のブラウザと歩調を合わせてくれないと怖くて使えない。 Object.observeはプリミティブな値の監視というその性質上、処理系レベルでないと正確なpolyfillが書けない。生のArray監視してる限り、Array.prototype.lengthの監視なんて出来ない。 AngularはObject.observeの代わりにDirtyCheckの実装というフォールバックが機能があるが、他のクライアントサイドフレームワークはそこに開発リソースを割くことは難しい。
僕がモジュラリティの点でAngularを批判しているのは、DirtyCheckもおそらくは一つのライブラリとして独立できるパーツでもあるが現状ロックインしているというのもある。
このような現状で、KOBA789氏の言っていたように、「Chromeでのみ速く動く」ようにみえるのは、ちょっとまずいのではないかな、と。
AngularJSは今すぐ生まれ変わるか死ね - Write and Run
別に僕はWeb標準の信者ではないが、Googleの信者でもないし、今のGoogleが現代のMSみたいな扱いになる未来がないわけでもないわけで、ChromeがIE6になる未来を懸念しているわけです。 僕としては仕様が分裂 or MS Appleが追従せずにasm.js方向のJavaScriptバイナリ化、LLVM言語からJS生成する未来のほうが現実的だと思っています。
私信: 財布は見つかってないです。。。