101

私の目標は、既存の Web アプリケーションを RESTfulシングル ページ アプリケーション(SPA)に移行することです。現在、いくつかの Javascript Web アプリケーション フレームワークを評価しています。


私の要件は次のとおりです。

  • RESTful データ層 (ember-data など)
  • MV*構造
  • 動的ルート
  • テストサポート
  • 慣習によるコーディング
  • SEOサポート
  • ブラウザ履歴サポート
  • 優れた (API-) ドキュメント
  • 生産準備完了
  • 生活共同体

背骨

現在のアプリケーションは を使用してbackbone.jsいます。全体としてbackbone.jsは素晴らしいプロジェクトですが、どこで何が行われ、どのように実装される必要があるかを決定する明確に定義された構造が欠けています。開発者が変わる大規模なチームで作業すると、ある種の構造化されていないコードが発生し、保守が難しく、理解が困難になります。これが、私が今、これらすべてのものをすでに定義しているフレームワークを探している理由です。

残り火

ember.js私は最後の日々を調べました。このアプローチは私には非常に有望に思えます。残念ながら、コードはほぼ毎日変更されます。したがって、私はそれを本番対応とは呼びません。残念ながら、バージョン 1.0 になるのが待ちきれません。しかし、私はこのフレームワークの背後にあるアイデアが本当に好きです。

角度

Angular.jsも広く普及しているフレームワークであり、Google によって管理されています。しかし、角度に慣れることができませんでした。私にとっては、構造が不明確で、フレームワークの各部分の全体的な責任についての説明が欠落しており、実装が遠回りに感じられます。はっきりさせておきますが、これは私の個人的な印象であり、知識不足に基づいている可能性があります。

バットマンメテオ

私が理解したように、両方のフレームワークにはサーバー部分も必要です。また、RESTful バックエンドが必要なだけなので、言語、技術、ソフトウェアに関係なく、これは私たちが望んでいるものではありません。さらに、バックエンド API は既に存在します (RoR)。

ノックアウトCanJSSpine

これら 3 つの候補については、これ以上深く掘り下げませんでした。たぶん、これが私の次のステップになるでしょう。


だから今私の質問:

  • 適切な SPA フレームワークがありませんか?
  • どのフレームワークを提案/推奨しますか?
  • 上記のフレームワークのいずれかを回避しますか?
  • 大規模な SP アプリケーションでの経験は?

PS: Steven Anderson (Knockout.js のコア開発者) による "Throne of JS" カンファレンス (2012 年から) と JavaScript フレームワーク全般に関する素晴らしいブログ投稿をお勧めしたいと思います。

PS: はい、SO に関する質問が既にあることは知っています。しかし、SPA の開発は急速に進んでいるため、それらのほとんどは既に時代遅れになっています。

4

2 に答える 2

81

私も最近、あるプロジェクトで JavaScript SPA フレームワークを決定する必要がありました。

  • 残り火

    早い段階で Ember を見て、あなたと同じような考えを持っていました - とても気に入りましたが、まだ使用するには時期尚早のように感じました... 私が読んだチュートリアルの約半分は、最近何かがあったため、現在のバージョンでは機能しませんでしたテンプレートの動作が変更されました。

  • 背骨

    バックボーンは、私たちが真剣に検討した最初のフレームワークでした。「明確に定義された構造」がないとあなたが考える理由がわかりませんか?バックボーンは、モデルとビューのコードを分割する方法について非常に明確です。アプリのテンプレートのようなものがないということでしょうか。とにかく、Backbone はモデル/REST バインディングの部分に重点を置いているように見えますが、ビュー バインディングについては何も規定していません。モデル バインディングが重要で、Rails を使用している場合は、これを行うのは簡単です。残念ながら、私のアプリの Web サービスは実際には一致せず、すべてのメソッドを独自.syncに作成する必要がありました。.parseモデル コードとビュー コードの分離は良かったのですが、すべてのバインディングを最初から作成する必要があるため、それだけの価値はありませんでした。

  • ノックアウト

    ノックアウトは、バックボーンの陽に対する陰のようなものです。バックボーンがモデルに焦点を当てているのに対し、ノックアウトは MVVM フレームワークであり、ビューに焦点を当てています。observableJavaScript オブジェクト プロパティのラッパーがあり、属性を使用してプロパティdata-bindを HTML にバインドします。ビュー バインディングは主にアプリに必要なものだったので、最終的には Knockout を使用しました。(...あとで説明するように、他のものも...) Knockout のビュー バインディングと Backbone のモデル バインディングが好きなら、両方のフレームワークを組み合わせたKnockBackもあります。

  • 角度

    Knockout の後でこれを見たところ、残念ながら、Knockout がビュー バインディングを行った方法に満足しているように見えました。ノックアウトよりもはるかに複雑で、入りにくいように見えました。そして、バインディングを行うために大量のカスタム HTML 属性を使用しますが、これが好きかどうかはわかりません...後で Angular をもう一度見てみるかもしれません。このプロジェクトには遅すぎました。

  • バットマン,メテオ, CanJS ,スパイン

    これらのどれもあまり詳しく見ていませんでした。Spine は明示的な Controller オブジェクトを持つ Backbone と同様のフレームワークであり、CoffeeScript で記述されていることは知っていますが。

  • あとがき

    前述のとおり、Knockout を使用することになったのは、私たちのプロジェクトでは、ビュー バインディングに焦点を当てることがより重要だったからです。また、モジュール化にはRequireJSを、ルーティングと履歴の処理にはcrossroadsHasherを、テストにはJasmineを、そしてJQueryTwitter BootstrapUnderscore.jsを使用することになりました。

    Javascript アプリの開発は、Rails エコシステムというよりも Java エコシステムに似ています。Rails は、すべてのアプリで使用する堅実なコア (Rails フレームワーク) を提供し、コミュニティはその上に多くのカスタマイズ (gem) を提供します。Java は...言語を提供します。そして、Java EE または Spring または Play または Struts または Tapestry を選択できます。JDBC、Hibernate、TopLink、または Ibatis を選択して、データベースと通信します。その後、Ant、Maven、または Gradle を使用してビルドできます。Tomcat、Jetty、JBoss、または WebLogin を選択して実行します。したがって、使用するフレームワークを選択するよりも、必要なものと連携するものを選択することに重点が置かれます

于 2013-01-15T13:07:27.860 に答える
8

多数の SPA を使用してクラウド サービス プロジェクトの開発を開始してから 1 年が経ちました。そのため、RESTful アーキテクチャのニーズを満たすために UI にどの JavaScript フレームワークを使用するかは大きな決断でした。そして、多くの調査の結果、Dojo フレームワークを使用することになりました。

あなたが好きになる主な機能:

  1. 教育を受けたコミュニティと完璧なデザインパターンを思いついたチーム。優れた慣習とモジュラー/オブジェクト指向アーキテクチャ。CrossBrowserプログラミングの態度で:)
  2. MV*構造。外部の .htm テンプレートを使用して UI ウィジェットを構築し、本番用にすべての JavaScript とテンプレートを単一の縮小された小さな .js に構築します
  3. 継承を使用してクラスを構築します。プロパティ セッター、多くの関数ツール。
  4. pub/sub メカニズム (Dojo の名前付きトピック)
  5. 検証フォーム コントロール、ダイアログ/ツールチップから、機能が豊富で高度にカスタマイズ可能な (ただし軽量) チャート & データ グリッド ソリューションまで、多くの UI コントロール。
  6. DOH という名前の優れた単体テスト システム。マウス/キーボードのアクションを再現するロボットもあります。
  7. すべてのjquery機能と多くのプラグインを備えたNodeListという名前のクエリツール(JQueryなど)。
  8. そして、良いが完全ではない部分。REST サービスで使用する JsonRest モジュールがあります。便利なツールですが、多くの機能がありません。

これらの問題を克服するために、AJAX ポーラー、エラー処理、ユニバーサル、読み込みと通知のソリューションを開発しました。Dojo フレームワークの規則と構造を使用して、非常に簡単に実行できました。それをしたくない場合は、おそらくこの部分に別のフレームワークを使用する必要があります。

Web 上の優れた SPA を見てみると、それらすべてがカスタマイズされており、複数のフレームワークを使用していることがわかります。しかし、Dojo だけでの経験は素晴らしかったです。したがって、他のフレームワークは考えないことをお勧めします。それらはすべて SPA に対して不完全だからです。しかし、最終的には別のオプションもあります (これはお勧めしませんし、詳細情報もありません)。UI と JavaScript を自動的に生成することにより、SPA を構築できる Java フレームワークを使用します。

于 2013-08-03T20:42:10.213 に答える