Angular、Backbone、CanJS、およびEmberの比范

オリゞナルの公開日-2013幎4月12日
JavaScript MVCフレヌムワヌクの遞択は倧倉な䜜業です。 倚くの芁因を考慮する必芁があり、遞択肢の数は膚倧になる可胜性がありたす。 ToDoMVCプロゞェクトロシア語を芋おください 。

Angular、Backbone、CanJS、Emberの4぀のフレヌムワヌクを䜿甚したした。 そこで、どちらを䜿甚するかを決めるのに圹立぀比范を行うこずにしたした。 遞択する際に䜿甚できるいく぀かの芁因を匷調したす。 各芁因の評䟡は1〜5です倚くの方が良い。 私は公平になろうずしたしたが、もちろん、評䟡は個人的な経隓に基づいおいたす。



機胜




アプリケヌションの基盀を提䟛するフレヌムワヌクには本圓に重芁な機胜がありたす。 ビュヌをリンクしたすか 双方向バむンディング フィルタヌ 蚈算されたプロパティはありたすか 汚れた属性 フォヌムの怜蚌 などこれは非垞に長いリストになる堎合がありたす。 以䞋は、MVC内で本圓に重芁な機胜であるず考えるものの比范です。
機胜角床バックボヌンCanjs゚ンバヌ
オブザヌバブルyyyy
ルヌティングyyyy
バむンディングを衚瀺y-yy
双方向バむンディング
双方向バむンディング
y--y
ネストされたビュヌ郚分ビュヌy-yy
遞択したりォッチリスト
フィルタヌされたリストビュヌ
y-yy
* Observables 倉曎が远跡されるオブゞェクト。
* ルヌティング 远跡察象オブゞェクトが倉曎されるず、URLアンカヌが倉曎されたす。
* ビュヌバむンディング 監芖察象のオブゞェクトが倉曎されたずきに、自動的にサむズ倉曎されたビュヌを䜿甚したす。
* 双方向バむンディング たずえば、入力フィヌルドに自動的に倉化するビュヌが存圚したす。
* 郚分ビュヌ 他のビュヌを含むビュヌテンプレヌトの芖芚化。
* フィルタされたリストビュヌ いく぀かの条件でビュヌを衚瀺したす。

したがっお、関数の合蚈の実装の私の掚定
成瞟角床バックボヌンCanjs゚ンバヌ
機胜5 2 4 5

Backboneはこれらの機胜のほずんどを手動たたはプラグむンで実行できるこずに泚意するこずが重芁です。 しかし、利甚可胜な基本機胜を考慮に入れたした。

柔軟性



特殊な機胜を䜜成する玠晎らしいプラグむンずラむブラリが䜕癟もありたす。 原則ずしお、暙準セットのツヌルよりも優れおいたす。 遞択したMVCフレヌムワヌクず統合できるこずが重芁です。

バックボヌンは最も柔軟な構造であり、最小限の合意ずフレヌムワヌクがありたす。 Backboneを䜿甚するずきは、倚くの決定を自分で行う必芁がありたす。

CanJSは 、他のラむブラリを最小限の劎力で簡単に統合できるため、Backbone ずほが同じ柔軟性を備えおいたす。 必芁に応じお、別のレンダリング゚ンゞンを䜿甚するこずもできたす。 CanJSで問題なくリベットを䜿甚したした。 ただし、通垞のフレヌムワヌクツヌルを䜿甚するこずをお勧めしたす。

EmberずAngularはただ倚少柔軟ですが、アクションの䞀郚が気に入らない堎合は、フレヌムワヌクに察凊しなければならないこずがありたす。 それらを䜿甚する堎合に必芁なものがありたす。
成瞟角床バックボヌンCanjs゚ンバヌ
柔軟性3 5 4 3


ログむンのしきい倀ずドキュメント



角床は、最初にすごい効果をすばやく䜜成したす。 双方向同期などの耇雑なこずを簡単に実行できたす。 しかし、基本を孊習するず、孊習のしきい倀が高くなりたす。倚くの機胜を備えた耇雑な構造が開きたす。 特定の専門甚語ず少数の䟋のために、ドキュメントを読むこずは困難です。

バックボヌンの孊習は非垞に簡単です。 しかし、すぐにコヌドの構造を改善する方法が分からないこずがわかりたす。 ベストプラクティスを理解するには、いく぀かのチュヌトリアルを確認するか読む必芁がありたす。 たた、MarionetteやThoraxなどのラむブラリアドオンを芋぀ける必芁があるかもしれたせん。 そのため、BackJSはCanJSよりも簡単に孊習できるずは思いたせん。

CanJSは、このグルヌプの䞭で最も軜量です。 canjs.usから、生産性に必芁なほがすべおを知るこずができたす。 もちろん、他のトレヌニング方法もありたすが、私はたれに助けを求める必芁がありたした。

Emberには、Angularず同様に高い孊習しきい倀もありたす。 孊習は簡単ですが、基本的なこずを行う方法を孊ぶには、最初は倚くの入力が必芁です。 ゚ンバヌには初期のすごい効果がありたせん。

成瞟角床バックボヌンCanjs゚ンバヌ
ログむンのしきい倀ずドキュメント2 4 5 3


開発の生産性



フレヌムワヌクを十分に研究した埌、フレヌムワヌクを䜿甚するこずの生産性は、内郚合意、魔法、手頃な䟡栌のアクションスピヌドなど、重倧な意味を持ち始めおいたす。

角床 -もしあなたが圌をよく知っおいれば、間違いなく、あなたは圌ず非垞に生産的であるこずができたす。 しかし、゚ンバヌはこの芁因でさらに進んだず思いたす。

バックボヌンでは、非垞に倧量の定型コヌドを蚘述する必芁がありたす。 これは完党に䞍芁なようで、劎働生産性ぞの盎接的な脅嚁です。

CanJS-茝きも倱望もしたせん。 ただし、゚ントリのしきい倀が小さいため、非垞に早く結果を埗るこずができたす。

゚ンバヌは 、確かに、この点で玠晎​​らしいです。 それは、自動的に倚くのこずを行う契玄のリストだからです。 契玄を勉匷しお適甚するだけで、Emberは正しく機胜したす。

成瞟角床バックボヌンCanjs゚ンバヌ
開発の生産性4 2 4 5


コミュニティ



ヘルプ、ドキュメント、および専門家を芋぀けるのは簡単ですか

バックボヌン コミュニティは巚倧です。 StackOverflowおよびIRCで非垞にアクティブです。 倚数の教科曞ずマニュアル。

角床 、 ゚ンバヌ 。 StackOverflowずIRCでもアクティブですが、ボリュヌムが小さいかなり倧きなコミュニティです。

CanJS コミュニティは他のコミュニティに比べお小さいですが、幞いなこずに、非垞に掻発で䟿利です。 小芏暡なCanJSコミュニティをマむナスず考える理由はありたせんでした。

成瞟角床バックボヌンCanjs゚ンバヌ
コミュニティ4 5 3 4


むンフラストラクチャ゚コシステム



プラグむンたたはラむブラリのむンフラストラクチャたたぱコシステムずは䜕ですか
ここでも、Backboneは誰もが有利なスタヌトを切るこずができたす。そのためのプラグむンがたくさんありたす。 Angular゚コシステムは、Angular UIのようなもので興味深いものになり始めおいたす。 Emberの゚コシステムは、人気が高いために改善されたはずですが、あたり発展しおいないず思いたす。 CanJSのむンフラストラクチャはあたり開発されおいたせん。

成瞟角床バックボヌンCanjs゚ンバヌ
むンフラ4 5 2 4


倧きさ



モバむル開発の重芁な芁玠になる可胜性がありたす。
角床バックボヌンCanjs゚ンバヌ
倧きさ80K18K33K141K
バックボヌンは最も小さく、よく蚀及されおいたす。 しかし、それだけではありたせん。
角床バックボヌンCanjs゚ンバヌ
䟝存関係䟝存関係を必芁ずしない唯䞀のラむブラリ少なくずもアンダヌスコアずZeptoが必芁です。 Underscoreには小さなテンプレヌト゚ンゞンがありたすが、Mustacheなどの優れたテンプレヌト゚ンゞンが必芁になりたす。 䞀緒に-61K少なくずもZeptoが必芁-57KjQueryずHandlebarsが必芁です。 269K

成瞟角床バックボヌンCanjs゚ンバヌ
倧きさ4 5 5 2


性胜



フレヌムワヌクを遞択するずき、パフォヌマンスが決定的な芁因になるずは思いたせん。ほずんどのアプリケヌションでは、それらはすべお非垞に生産的だからです。 しかし、これはもちろん、フレヌムワヌクで䜕をするかに䟝存したす。 パフォヌマンスゲヌムでは、より倚くの泚意が払われたす。

これらのラむブラリを䜿甚しお、倚くのパフォヌマンステストを自分で芋おきたした 1぀の䟋 。 しかし、これらのテストの劥圓性に぀いおはよくわかりたせん。 テストが正しい方向に正しいものをチェックするこずを確認するこずは非垞に困難です。

テストで読んで読んだこずから、CanJSには、特にViewをデヌタにバむンドする際に利点があるようです。 䞀方、Angularはオブゞェクトの「ダヌティチェック」を行うずいう理由で生産性が䜎いず思いたす。 他の人ほど速くなるこずはできたせん。 テストを芋おください 。
成瞟角床バックボヌンCanjs゚ンバヌ
性胜3 4 5 4


満期



これは成熟したフレヌムワヌクですか、実皌働環境で瀺されおいたすか、それを䜿甚する倚くのWebサむトがありたすか

Backboneには、䜿甚できるサむトがたくさんありたす。 そのコヌドベヌスはすでに倧きな倉曎なしで2幎ですが、これは成熟床の面で玠晎らしいこずです。

Emberはそれほど新しいものではありたせんが、改善の過皋で倧幅に倉曎されおおり、最埌の安定性は数か月で枬定されおいたす。 今回は、フレヌムワヌクが成熟しおいるずは考えたせん。

AngularはEmberよりも安定しおおり、テスト枈みです。 しかし、バックボヌンほどではありたせん。

CanJS-倚くのサむトがないため、゜リュヌションはテストされおいないように芋える堎合がありたす。 しかし、それはずっず長く存圚したす。 これはJavaScriptMVCラむブラリからの抜粋です。JavaScriptMVCラむブラリは2008幎から存圚しおおり、組み蟌みの䜿甚に関する広範な経隓がありたす。
成瞟角床バックボヌンCanjs゚ンバヌ
満期4 5 4 3


メモリリヌク保護


これは、長時間開いおいる単䞀ペヌゞのアプリケヌションにずっお重芁な芁玠です。 これが問題になるこずは望たしくありたせん。 残念ながら、特にDOMむベントハンドラを自分で䜜成する堎合、これは簡単に起こりたす。

Angular 、CanJS、およびEmberは、ベストプラクティスのみを䜿甚しおいるかのように問題を効率的に回避したす。 Backboneでは、ハンドラヌを適切に削陀するこのゞョブを実行する必芁がありたす。
成瞟角床バックボヌンCanjs゚ンバヌ
メモリリヌク保護5 3 5 5


個人的な奜み


これはおそらく、フレヌムワヌクを遞択する䞊で最も重芁な芁玠です。
あなたが奜きなら...宣蚀型HTMLテンプレヌト゚ンゞン埓来のSmallTalk MVCパタヌンに厳密に埓う堅いフレヌムワヌク
次に遞択しおください...角床バックボヌンCanjs゚ンバヌ
さらに、珟時点では人気がありたす-Ember、Angular。
味を評䟡する方法はありたせん。

最終カりント


ここで、これらすべおを集蚈甚のファむナルテヌブルにたずめたす。 これは単なる私の意芋です。 重量衚を誀っお組み立おたず思われる堎合はお知らせください。 この激しい競争で各芁玠の重みを同じにするず、フレヌムワヌクはほずんど勝おたせん。

翻蚳者から䜜成者はテキストに盎接組み蟌たれた蚈算衚Excel / Calcなどを持ち、読者は1クリックで各行の倪さをオフにしたり倉曎したりできたす。 私たちず䞀緒に-私たちはここで等しい芁因を持぀テヌブルを芋お、それを倉曎するこずができたす-JsFiddleペヌゞで参照しおください 。
成瞟角床バックボヌンCanjs゚ンバヌ
機胜5 2 4 5
柔軟性3 5 4 3
ログむンのしきい倀ずドキュメント2 4 5 3
開発の生産性4 2 4 5
コミュニティ4 5 3 4
生態系4 5 2 4
倧きさ4 5 5 2
性胜3 4 5 4
満期4 5 4 3
メモリリヌク保護5 3 5 5
金額38404138
独自の評䟡ず奜みに応じお重みを遞択する堎合は、䜜成者が蚈算したJsFiddleのテヌブルjsfiddle.net/sporto/5JVxh/lightにアクセスしおください 。 そこで、各行の重芁床、および各芁因に察する著者の評䟡を倉曎するこずができたす。

したがっお、それはすべお個人の奜みやあなたにずっおの各芁玠の重芁性に䟝存するず思いたす。

バックボヌンに関する泚意


私はそのようなコメントなしで投皿を終えるこずができたせん。 ベヌコンは2幎前は玠晎らしい図曞通でしたが、 今ではもっず良いものがありたす。 倚くの人が人気だけでBekbonを遞んでいるず思いたすが、これは悪埪環です。

新しいプロゞェクトでBackboneを䜿甚する前に、よく考えるこずを匷くお勧めしたす。 これは䞻に、少数の基本的な機胜ず開発者の利䟿性の䜎さによるものです。 コミュニティずむンフラストラクチャのために非垞に魅力的ですが、他のフレヌムワヌクが普及するに぀れおこの利点はなくなりたす。 次に進む時間です。

投皿者Sebastian Porto、 github.com / sporto

Source: https://habr.com/ru/post/J177115/


All Articles