65

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

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

4

3 に答える 3

70

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

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

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

于 2012-04-26T00:52:38.967 に答える
35

ファッションのトレンドと同様に、Web アプリケーションのトレンドは、多くの独断的な議論を引き起こします。ほとんどの場合、正解も不正解もありません。しかし、誰もが独自の個人的なスタイルを持っているので、自分のスタイルを見つけなければなりません.

個人的には、Knockout と Backbone の両方が好きで、実際にどちらかを選択する必要がないことを知ってうれしく思いました。それらをうまく橋渡しする「Knockback」と呼ばれるプラグインを使用できます。

Knockout の宣言型バインディングを使用して、Backbone の MVP 構造を楽しんでいます。 詳細を知りたい場合は、いくつかの例とともに、これについてのブログ エントリを書きました。

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

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

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

于 2012-04-26T16:49:56.883 に答える