Ember.js 1.xシリーズ最後のイテレーションとなる1.13が発表された。Ember 2.0の最初のベータ版も合わせて提供される。
Emberの共同開発者であるYehuda Katz氏は,コントリビュータのMathew Beale氏と連名で,最新バージョンのリリースをEmber.jsブログ上に発表した。今回のバージョン1.13では,“少なくとも43名のコントリビュータによる,680以上におよぶコミットの成果”であることが特に強調されている。
1.13リリースにはGlimmerレンダリングエンジンが添付されている。Ember 1.xシリーズでは3回目となるレンダリングの大幅なオーバーホールについて両氏は,効率面で粗さの目立った従来バージョンに比較すると,“共通的なシナリオの大部分において,再描画のパフォーマンスが劇的に改善されるはずだ”,と述べている。
氏らが挙げるメリットは次のようなものだ。
Glimmerでは,DOMのダイナミックな領域である仮想ツリーを利用して,差分を使った更新方法を採用しています。元々のデータ構造(例えば配列)が完全に置き換えられても,最終的にレンダリングされるコンテントが変更されるまで,DOMは更新を行いません。
ある配列を(サーバから配列を取得する,
.sort()
を使って新しい配列を生成するなどの理由で) 別の配列に更新する場合には,パフォーマンスの大幅な改善を体感すると同時に,この種の処理がEmberでは十分に実用的であると感じることができるでしょう。
さらに,Glimmerのハイブリッドモデルによって,“(set
を使った)明示的な変更が行われた場合には,必要に応じてその情報を活用することも可能”なため,データ構造全体の効率的な再描画と両立することができる。
バージョン1.13に合わせて,2.0シリーズ最初のベータ版も提供される。2.0ベータ版について氏らは,”開発モデルでの改善がすべて反映されている訳ではありませんが,その方向への重要なステップになるでしょう“,と述べている。”重要なステップ“には,each-in
やget
ヘルパの導入などの新機能も含まれている。前者は”オブジェクトプロパティのイテレーションを実行する“もので,後者のget
ヘルパは”オブジェクトから単一のプロパティを制限的に取得する手段“である。
Ember 2.0では,1.xシリーズで非推奨となっていた機能や公開APIの多くが削除されている。また,すでに報告したように,Emberコミュニティの投票での圧倒的支持を受けて,Internet Explorer 8のサポートが廃止される予定だ。
廃止されるAPIは次のようなものだ。
Ember.Handlebars.helper, Ember.Handlebars.makeBoundHelper, Ember.Handlebars.helper, Ember.Handlebars.compileなど,ハンドルバーAPIすべて
{{render "some-controller"}}, {{each item itemController="some-controller"}}
など,コントローラAPIの大部分Ember.CoreView, Ember.View, Ember.ContainerView, Ember.CollectionViewを始めとする,すべてのビューAPI
ただし,非推奨APIの多くはすでにコアサポート・アドオンに移動済であり,Deprecation Guideには明確なマイグレーションパスも用意されている。
JavaScriptコミュニティからの反応は良好だ。今回のリリースを取り上げたHacker Newsの議論では,Thomas Chen氏が次のようにコメントしている。“Emberの開発が順調で,とても喜んでいます。emberjsのヘビーユーザとして,変更部分は概ねよい方向に向かっていると思っています。”
続いて氏は,不平ではない,と前置きした上で,Emberのコアチームにいくつか質問をしている。
1. サーバの高速ブートの件はどうなったのでしょう? 2.0に合わせて提供されるものだと思っていたのですが,その機能が破棄されたのか,あるいは別のプロジェクトに移管されたのでしょうか?
2. initializer APIの変更についてまったく触れていません(instanceInitializerとvanilla initializerの分離など)が,2.0では以前のinitializer APIに戻るのでしょうか?
3. アクションのバブリングを廃止したことで,ネストしたコントローラ内で起動するアクションを明示的に伝達しなければならなくなりましたが,アプリケーションルート内ではどうすればいいのでしょう?例えば,短期的なフラッシュメッセージを生成するAdminUserControllerがあって,これをアプリケーションルートでレンダリングしたいとしましょう。この場合,すべてのルートに {handleFlash {...}} アクションを配置するという,大変な手間を掛けざるを得ないのでしょうか?
Yehuda Katz氏はこれに答えて,“SEO専用の高速ブート”をカナリアリリースとして提供済であること,“最重要事項であるRehydration”の近日開始に向けて作業していること,などを説明した。initializer APIについて氏は,Emberチームが“いくつか前にリリースした分離形式のAPIの固執した結果”だったと説明している。また,最後の質問であるアクションバブリングの廃止については,“最初はもっと複雑な方法(サービスを逃がし弁として使う)を考えていたのですが,今は従来からの儀式的なコード記述を避けるアイデアをいくつか出しているところです。ご期待ください。(この種の問題に対処すべく,近いうちにRFCを発表するつもりです。)”
リリースの全情報については,Ember 1.13と2.0それぞれの変更ログを参照してほしい。
Ember.jsはMITライセンスでリリースされている。InfoQの読者は,GitHubプロジェクト経由でEmber.jsにコントリビュート可能だ。