web-dev-qa-db-ja.com

単一ページのアプリケーションを構築するJavaScriptフレームワーク

私の目標は、既存の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)。

ノックアウトCanJS および Spine

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


だから今私の質問:

  • 良いSPAフレームワークがありませんか?
  • どのフレームワークを提案/推奨しますか?
  • 言及されたフレームワークのいずれかを避けますか?
  • 大きなSPアプリケーションでの経験は何ですか?

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

PS:はい、私はすでにいくつかの質問がSOにあることを知っています。しかし、SPAの開発は非常に迅速かつ高速であるため、それらのほとんどはすでに古くなっています。

101

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

  • エンバー

    早い段階でEmberを見て、あなたと同じような考えを持っていました-私はそれが本当に好きでしたが、使用するにはまだ早すぎるように感じました...私が読んだチュートリアルの約半分はテンプレートの動作方法が最近変更されたため、現在のバージョン。

  • バックボーン

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

  • ノックアウト

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

  • 角度

    Knockoutの後にこれを見てください-残念ながら、Knockoutがどのようにビューバインディングを表示したかについて、私たち全員がかなり満足しているように見えました。 Knockoutよりも複雑で入りにくいように見えました。そして、カスタムHTML属性の束を使用してバインディングを行いますが、これが好きかどうかはわかりません... Angularを後で見直すかもしれません。フレームワークのように-多分、私たちはそれをこのプロジェクトには遅すぎたのかもしれません。

  • バットマン流星CanJS背骨

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

  • あとがき

    先ほど述べたように、Knockoutを使用することになりました。プロジェクトでは、ビューのバインドに重点を置くことがより重要だからです。また、モジュール化には RequireJS を、ルーティングと履歴を処理するには crossroads および Hasher を、テストには Jasmine を使用しました。 JQueryTwitter Bootstrap 、および nderscore.js (そしておそらく現時点で忘れているライブラリがもっとあります)。

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

81
Nate

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

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

  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フレームワークの規則と構造を使用して、非常に簡単にそれを行いました。そうしたくない場合は、おそらくこの部分に別のフレームワークを使用する必要があります。

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

8
Unicornist