usotech

erratic magical world

Ember.js から AngularJS に移行中

http://beust.com/weblog/2012/12/29/migrating-from-ember-js-to-angularjs/ より斜め読み。

  • 中規模の JavaScript アプリケーションを Ember → Angular に移した。
  • なぜ?
    • Ember 0.9.x ベースで作ってたけど 1.0 に乗り換えるのツラい。
    • pre-release 版を使ってるんだからしょうがないんだけど、根本的な変更も多いし。
    • 他のを見ても損は無いかなって。
  • Angular は Ember より広範なフレームワーク。
  • Binding / MVC フレームワークだけじゃない。
    • Module。自分が好きなように出来る。
    • Injection と Testability。
    • Partial のサポート。Ember 使ってて本当に欲しかったものはコレ。HTML テンプレートを小さく分割出来なかった。
    • Documentation。Ember のドキュメントはかなり多いけど整理されてない。Angular は整理されてる。
  • Ember と Angular には色々な違いがある。
    • Ember は昔ながらのテンプレート。散らばったディレクティブ。
    • Angular は独自の HTML 属性を使い、プリプロセッサで DOM を処理する。
    • Angular のアプローチの方がデバッグしやすかった。
      • 展開されたあとの HTML を検査出来る。
      • Ember はプリプロセッサが magic identifiers(e.g. "id="metamorph-34-start") を付けるし。
  • バインディングもかなり違う。
    • Embre はモデルに含まれるオブジェクトをラップさせるけど問題を孕んでる。
    • object.set('foo', newValue) みたいにセッター呼ばないといけないけど、バインディングが動かないデータもある。
    • 連鎖的な更新がすぐに実行される。
      • データを色々操作してから纏めて更新したい。
      • 仕方なくモデルにフラグを設け、準備が出来るまで更新しないようにするしかなかった。
    • Angular のバインディングの方はもっと簡単で、単純にモデルを更新すれば良い。
    • Ember の computed property はテンプレートにバインディングを書かないといけなくて厄介。
  • これだけは言わせてくれ。IDEA の JavaScript サポートは Eclipse の数光年先を行ってるぜ。
  • まとめると Ember 使ってた頃より Angular 楽しんでる。
    • 活気ある。
    • ドキュメントは高品質。
    • モダンな概念のサポート(modularity, testability, injection)。
    • JS で SPA (Single Page Application) 作るときのデファクトになると思う。