web-dev-qa-db-ja.com

knockout.jsが小規模なプロジェクト、backbone.jsが大規模なプロジェクトに適しているという評判があるのはなぜですか?

数か月間、knockout.jsを使用してきましたが、使用するのが毎日の楽しみであることがわかりました。 DOMの状態を管理したり、独自のカスタムバインディングを適用したりする必要がないことから得られるメリットは驚くべきものであり、すぐに使用できるモデル機能を持​​たなくてもかまいません。しかし、knockout.jsと他のフレームワークの概要を読むたびに、コンセンサスは素晴らしいと思われ、全体的にコードが少なく複雑になりますが、小規模なプロジェクトには適しています。この声明は多くの説明なしに常に事実の問題として与えられているので、コンセンサスが何であるかについて私は混乱しています。 (公平のために、私はまだBackboneを使用していないので、それらがどのように比較されるかを本当に知りません)

私は2つの非常に大きなプロジェクトでそれを使用しましたが、それぞれが約1ダースのモデルと1ダースほどのビューモデルを持ち、問題はありませんでした。大規模プロジェクトで見られる唯一の欠点は、ノックアウトを適用してすべてのバインディングを管理すると、無視できないパフォーマンスヒットが発生することです。しかし、それが主な関心事ですか、それとも私が見逃している何かがありますか?

65
Jeremy Smith

私の(短い) ノックアウトとバックボーンの比較

Knockoutは、HTMLとModelの間に滑らかで使いやすいモデルバインディングを提供することを目的としています。実装および使用パターンのように、非常にXAML/Silverlight/WPFです(これはどこから来たのかを考えると理にかなっています)。ただし、Knockoutはモデルを超えたガイダンスや構成を提供しません。モデルやモデルバインディングを超えて、適切に構造化されたJavaScriptアプリケーションを構築するのは開発者次第です。これにより、Knockoutを使用するときに適切なアプリケーション構造を検討する必要があることに気付かないため、JavaScriptの優れた経験のない開発者が悪い道をたどることになります。もちろん、この問題は決してノックアウトのせいではありません。多くの場合、ツールが提供するもの、または大規模なJavaScriptアプリの構成方法についての理解不足です。

個人的に、私はノックアウトが好きではありません。私はMVVMパターンのファンではありません。私はBackboneのアプローチを好み、ほとんどの時間をBackboneで作業します。ただし、Knockoutが大規模なアプリケーションに適していないという「事実」の意見は間違っていると思います。 Knockoutを使用すると、非常に大きく、複雑で、適切に構造化されたアプリケーションを構築できます。ただし、データバインディングとモデルを超えて、構造のallを提供する必要があります。

70
Derick Bailey

ファッションのトレンドなどのWebアプリケーションのトレンドは、spark多数の意見を交わした議論です。ほとんどの場合、正解も不正解もありません。あなたはあなたのものを見つける必要があります。

個人的には、KnockoutとBackboneの両方が好きで、実際にそれらを選択する必要がないことを知って喜んでいます。 「Knockback」と呼ばれるプラグインを使用して、それらをうまく結び付けることができます。

Knockoutの宣言型バインディングを使用して、BackboneのMVP構造を楽しんでいます。 これについてのブログ記事を書いた 、いくつかの例を挙げて、もっと知りたいなら。

大規模で複雑なDOMでのKnockoutのパフォーマンスヒットについては、グローバルに適用する代わりに特定のDOM要素にバインドを制限することで回避できます。

ko.applyBindings(myViewModel, $('#myElement')[0]);

Knockoutは2番目のパラメーターとしてjQueryオブジェクトではなくDOM要素を想定しているため、末尾の[0]が必要です。

35

大規模なjavascriptアプリケーションのコード編成は困難な問題であり、使用するフレームワークとはまったく無関係です-フレームワークが多くの意見を述べる構造を提供しない限り。

Backbone.jsもKnockout.jsもディレクトリ構造やライフサイクル管理方法を推奨しておらず、他の1つに欠けている機能はコミュニティがサポートするプラグインまたはスタンドアロンのマイクロフレームワークで埋めることができることを考慮すると、真剣に意味がありませんアプリケーションのサイズ/複雑さの観点から、一方を他方より優れていると見なすこと。

現在、大規模なJavaScriptアプリケーションを使用している場合、宣言的なアプローチ、DOM属性ベースのデータバインディングとMVVMパターン、およびEmber.jsを使用する場合は、Knockout.jsよりもAngular.jsを使用する方が適している場合がありますMVCおよび文字列ベースの(ハンドルバー)テンプレートを好む場合は、Backbone.jsよりも適しています。どちらも活発に開発されており、機能に関して肩と肩を比較しており、以前に登場したBackboneやKnockoutのような小さなフレームワークを持つ大規模なアプリケーションで作業する際に直面する問題を緩和するために特別に設計されました。

3
lorefnon