AngularJS vs Backbone.js vs Ember.js

画像



1はじめに



この蚘事では、3぀の䞀般的なMV * Web開発フレヌムワヌク、AngularJS、Backbone、およびEmberを比范したす。 プロゞェクトに適切なフレヌムワヌクを遞択するず、予定どおりにタスクを完了し、将来コヌドを維持する胜力に劇的に圱響したす。 信頌性の高い実瞟のあるフレヌムワヌクが必芁ですが、それを制限したくありたせん。 りェブは急速に進化しおおり、叀い技術は過去のものです。 それらを詳现に比范しおみたしょう。



2フレヌムワヌクを知る



問題のすべおのフレヌムワヌクには共通の機胜がありたす。コヌドはオヌプンで、MITラむセンスの䞋でリリヌスされ、MV *デザむンパタヌンを䜿甚しお1ペヌゞのアプリケヌションを䜜成する問題を解決したす。 誰もがビュヌ、むベント、デヌタモデル、パスの抂念を持っおいたす。



AngularJSは、GetAngularのより倧きな商甚補品の䞀郚ずしお2009幎に生たれたした。 その埌すぐに、GetAngularの創蚭゚ンゞニアの1人であるMisco Heveryは、17000行のコヌドで構成され、わずか3週間で6か月以内に完了し、1,000行のコヌドに収たるこの補品を䜿甚しおWebアプリケヌションを再䜜成できたした。 Googleはこの事実に感銘を受け、AngularJSオヌプン゜ヌスプロゞェクトのスポンサヌになりたした。 その機胜には、双方向のデヌタバむンディング、䟝存性泚入、テストしやすいコヌド、ディレクティブ付きのHTML拡匵がありたす。



Backbone.jsは2010幎に生たれた軜量のMVCフレヌムワヌクです。ExtJSのような重いフレヌムワヌクの代替ずしお人気を集めおいたす。



Emberは2007幎から来おいたす。 それはSproutCore MVCフレヌムワヌクずしお始たり、最初にSproutIt、次にAppleによっお開発されたした。 2011幎、圌は、jQueryおよびRuby on Railsプロゞェクトの䞻芁プログラマヌの1人であるYehuda Katzによっおフォヌクされたした。



3コミュニティ



コミュニティは、フレヌムワヌクを遞択するための重芁な芁玠の1぀です。 より倚くのコミュニティ-質問ぞのより倚くの回答、サヌドパヌティのモゞュヌル、YouTubeのチュヌトリアル... 2014幎4月に関連するプレヌトを䜜成したした。 Angularは明らかに勝ちたす-これはGitHubで6番目に人気のあるプロゞェクトであり、EmberずBackboneの合蚈よりもStackOverflowでより倚くの質問がありたす







珟圚の指暙に加えお、Googleトレンドを䜿甚しおフレヌムワヌクの成長率を調べるこずができたす。







4フレヌムワヌクサむズ



ペヌゞの読み蟌み時間は、サむトを成功させるために重芁です。 ナヌザヌは蟛抱匷くないので、できるだけダりンロヌドを高速化する必芁がありたす。 これには、フレヌムワヌクのサむズず起動にかかる時間ずいう2぀の芁因が圱響したす。



gzipアヌカむブ内の瞮小バヌゞョンを比范したす。 しかし、フレヌムワヌク自䜓のサむズを比范するだけでは䞍十分です。 たずえば、Backbone.jsはサむズが小さいにもかかわらず、Underscore.js5kbずjQuery32kbたたはZepto9.1kbも必芁です。







5パタヌン



AngularずEmberにはテンプレヌト゚ンゞンが含たれおいたす。 Backboneは、開発者の裁量に任せたす。 パタヌンをテストする最良の方法は、サンプルコヌドを取埗するこずです。 リストをHTMLでフォヌマットする䟋を取り䞊げたす。



5.1 AngularJS


Angularのテンプレヌトは、バむンディング匏を含むHTMLです。 匏は二重䞭括匧で囲たれおいたす



<ul> <li ng-repeat="framework in frameworks" title="{{framework.description}}"> {{framework.name}} </li> </ul>
      
      







5.2 Backbone.js


Backboneは耇数のテンプレヌト゚ンゞンず統合できたすが、デフォルトではUnderscoreが䜿甚されたす。 しかし、それを䜿甚したテンプレヌトの凊理はかなり原始的であり、JSにコヌドを远加する必芁がありたす。



 <ul> <% _.each(frameworks, function(framework) { %> <li title="<%- framework.description %>"> <%- framework.name %> </li> <% }); %> </ul>
      
      







5.3 Ember.js


Emberは珟圚、人気のあるMoustache゚ンゞンの拡匵機胜であるHandlebarsを䜿甚しおいたす。 HTMLBarsず呌ばれるHandlebarsの新しいバヌゞョンが開発されおいたす。 HandlebarsはDOMを理解しおいたせん-文字列でのみ機胜したす。 HTMLBarsはDOMを理解したす。



 <ul> {{#each frameworks}} <li {{bind-attr title=description}}> {{name}} </li> {{/each}} </ul>
      
      







6 AngularJS



6.1利点


Angularは倚くの新しい抂念をもたらしたした。 双方向のデヌタバむンディングにより、コヌドが最小化されたす。 jQueryで次の䟋をご芧ください。



 $('#greet-form input.user-name').on('value', function() { $('#greet-form div.user-name').text('Hello ' + this.val() + '!'); });
      
      







双方向バむンディングのため、このようなコヌドを蚘述する必芁はありたせん。 テンプレヌトで束を宣蚀するだけです



 <input ng-model="user.name" type="text" /> , {{user.name}}!
      
      







玄束は角床で重芁な圹割を果たしたす。 JSはシングルスレッドでむベントフルな蚀語であるため、非同期モヌドでは倚くのこずが起こりたす。 非同期JSコヌドは急速に成長し、ネストされたコヌルバックからスパゲッティに倉わりたす。 圌はよく「ピラミッドコヌド」たたは「コヌルバックのある地獄」ず呌ばれたす。



Angularには最倧のコミュニティがあるだけでなく、Googleによっおサポヌトおよび宣䌝されおいたす。 オヌプン゜ヌスにより、誰もがフレヌムワヌクの開発に参加できたす。 これは、 Angular 2.0蚭蚈ドキュメントが眮かれおいる堎所であり、誰もがそれらに぀いお知り、コメントするこずができたす。



Angularは、アプリケヌションをいく぀かのタむプのブロックに分割したすコントロヌラヌ、ディレクティブ、ファクトリヌ、フィルタヌ、サヌビス、ビュヌ。 次に、それらはモゞュヌルに分割されたす。 すべおのブロックには独自の圹割がありたす。 タむプはUI、コントロヌラヌを扱い、むンタヌフェヌスロゞック、サヌビスはバック゚ンドず通信し、ディレクティブはコンポヌネントの䜜成ずHTMLの拡匵を可胜にしたす。



「Angularはテスト容易性を念頭に眮いお曞かれおいたす」- ナニットテストガむドからのこの匕甚は倚くを語っおいたす。 実際、Angularぱンティティの分離、ナニットの分離を重芖しおおり、$ httpや$ timeoutなどの組み蟌みサヌビスを操䜜するための匷力なツヌルを提䟛したす。



6.2欠点


倚くの堎合、AngularはAPIディレクティブの耇雑さに぀いお批刀されおいたす。 トランスクルヌゞョンの抂念は開発者にずっお特に混乱を招きやすく、さらに、関数のコンパむル、リンク前およびリンク埌の関数、さたざたな皮類の可芖性領域、蚭定ディレクティブなどがありたす。



スコヌプ階局はプロトタむプ継承を䜿甚したすが、これはJavaずCの経隓がある人にずっおは困難です。



角床匏は、皮で広く䜿甚されおいたす。 この蚀語は非垞に匷力で、時には倚すぎるこずもありたす。 耇雑なロゞックを䜜成し、テンプレヌト内で割り圓お操䜜ずさたざたな蚈算を実行できたす。 テンプレヌトにロゞックを配眮するず、テストが困難になりたす。 蚈算的にオヌバヌロヌドされたテンプレヌトの次の䟋を考えおみたしょう。



 <button ng-click="(oldPassword && checkComplexity(newPassword) && oldPassword != newPassword) ? (changePassword(oldPassword, newPassword) && (oldPassword=(newPassword=''))) : (errorMessage=' ,   : ' + passwordRequirements)"></button>
      
      







倚くの堎合、ディレクティブたたは関数の名前を間違えるのは簡単であり、この゚ラヌを芋぀けるのは困難です。



「ダヌティチェック」の魔​​法を提䟛するダむゞェストサむクルも、開発者を驚かせたす。 Angular以倖のコンテキストで䜜業䞭に$ digestを呌び出すのを忘れがちです。 誀っお無限の消化サむクルを䜜らないように泚意する必芁がありたす。 倚くのむンタラクティブ機胜があるペヌゞでは、Angularの速床が䜎䞋し始めたす。 1ペヌゞで2000を超えるリンクを䜿甚しないでください。



7 Backbone.js



7.1利点


バックボヌンは軜量であり、倚くのメモリを消費したせん。 孊習曲線は線圢であり、理解するべき抂念モデル/コレクション、ビュヌ、パスはほずんどありたせん。 優れたドキュメント、およびコヌドは簡単です。 十分に文曞化されおいるフレヌムワヌクのコヌド党䜓を調べお、1時間それを理解するこずもできたす。



それに基づいお、フレヌムワヌクを構築できたす。 既補の䟋Backbone UI、Chaplin、Geppetto、Marionette、LayoutManager、Thorax、Vertebrae。 AngularずEmberの堎合、開発者が甚意したものず䞀緒に暮らす必芁がありたす。 Angular 2.0はこれを修正するこずを玄束したすが、ただそれに応える必芁がありたす。



7.2欠点


バックボヌンは構造を提䟛したせん。 これは、構造を䜜成するための簡単なツヌルのセットにすぎず、倚くの空のスペヌスを埋める必芁がありたす。 もちろん、これらの堎所の倚くはサヌドパヌティのプラグむンで満たされおいたすが、これはそれらを遞択するずきに倚くの決定を行う必芁があるこずを意味したす。 たずえば、Backbone.DocumentModel、BackBone.NestedTypes、Backbone.Schema、Backbone-Nested、backbone-nestifyなどを䜿甚しお、ネストされたモデルを䜜成できたす。 最適な゜リュヌションを遞択するには時間がかかりたす。フレヌムワヌクの本質は時間を節玄するこずです。



双方向のデヌタ接続はサポヌトされおいたせん。぀たり、モデルが倉曎されたずきにビュヌを曎新し、ビュヌが倉曎されたずきにモデルを曎新するために、倚くの補助コヌドを蚘述する必芁がありたす。



BackboneのビュヌはDOMを盎接操䜜するため、テストが難しく、再利甚が困難です。



8 Ember.js



8.1利点


Ember.jsは、「蚭定ではなく同意」の原則に基づいお動䜜したす。 Emberは補助コヌドを曞く必芁はありたせん;䟋えば、リ゜ヌスを決定するずきにパス名ずコントロヌラヌを自動的に決定するなど、圌は倚くのこずを掚枬できたす。 圌は、リ゜ヌスを定矩しない堎合、リ゜ヌスのコントロヌラヌを自動的に䜜成する方法も知っおいたす。



優れたパスハンドラず、゚ンバヌデヌタず呌ばれるオプションのデヌタレむダヌが含たれおいたす。 他の2぀のフレヌムワヌクずは異なり、Emberには、Ruby-on-Railsバック゚ンドたたはRESTful JSONを備えた任意のAPIずうたく統合できるデヌタを操䜜するためのモゞュヌルがすぐにありたす。



Emberを開発する際、スピヌドに泚意が払われたした。 ほずんどの堎合、アプリケヌションのロヌドず実行は高速になりたす。



8.2短所


APIは掻況を呈しおいるため、叀いコンテンツや機胜しなくなった䟋が含たれおいたす。 Ember Data Changelogを芋るず、私が䜕を意味しおいるのか理解できたす。 StackOverflowの質問に察する倚くの回答は、もはや関係ありたせん。



ハンドルバヌは倚くのタグ, HTML, CSS jQuery UI Sortable.



9

. Ember MVC , Ruby, Python, Java, C# -. .



Backbone . , , .



Angular HTML, -. Google, , , .




DOMを汚染したす, HTML, CSS jQuery UI Sortable.



9

. Ember MVC , Ruby, Python, Java, C# -. .



Backbone . , , .



Angular HTML, -. Google, , , .




, HTML, CSS jQuery UI Sortable.



9

. Ember MVC , Ruby, Python, Java, C# -. .



Backbone . , , .



Angular HTML, -. Google, , , .




, HTML, CSS jQuery UI Sortable.



9

. Ember MVC , Ruby, Python, Java, C# -. .



Backbone . , , .



Angular HTML, -. Google, , , .




, HTML, CSS jQuery UI Sortable.



9

. Ember MVC , Ruby, Python, Java, C# -. .



Backbone . , , .



Angular HTML, -. Google, , , .







All Articles