1. ホーム
  2. javascript

[解決済み] シングルページアプリケーションを構築するためのJavaScriptフレームワーク [終了しました]。

2023-01-15 14:54:53

質問

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


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

  • RESTfulなデータ層(ember-dataのような)
  • MV*構造体
  • ダイナミック・ルート
  • テストサポート
  • 規約によるコーディング
  • SEO対策
  • ブラウザ履歴のサポート
  • 優れた (API-) ドキュメント
  • 生産可能
  • リビング・コミュニティ

バックボーン

現在のアプリケーションは backbone.js . 全体として backbone.js は良いプロジェクトですが、どこで何が起こり、どのように物事が実装されなければならないかを決定する、明確に定義された構造が欠けているのです。開発者が入れ替わる大きなチームでの作業は、ある種の非構造化コードにつながり、メンテナンスが難しく、理解するのも難しいです。このような理由から、私は今、これらすべてをすでに定義しているフレームワークを探しているのです。

エンバー

を調べてみると ember.js を調べました。このアプローチは私にとって非常に有望に思えます。しかし、残念なことに、コードはほとんど毎日変更されます。ですから、私はこれをプロダクションレディと呼ぶつもりはありません。そして、残念ながら、バージョン1.0になるのを待つことはできません。しかし、私はこのフレームワークの背後にあるアイデアをとても気に入っています。

Angular

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

バットマン メテオ

私が理解したところでは、どちらのフレームワークもサーバーパートを必要とします。そして、私たちはRESTfulなバックエンドが欲しいだけなので、どんな言語、技術、ソフトウェアであっても、これは私たちが欲しいものではありません。さらに、バックエンド API はすでに存在しています (RoR)。

ノックアウト , CanJS 背骨

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


それでは質問です。

  • 私は何か良いSPAフレームワークを見逃していますか?
  • どのようなフレームワークを提案/推奨しますか?
  • 言及されたフレームワークのどれかを避けますか?
  • 大規模なSPアプリケーションの経験はどのようなものですか?

PS:私がお勧めしたいのは グレートブログポスト Steven Anderson (Knockout.js のコア開発者) が2012年に開催した「Throne of JS"」カンファレンスと javascript フレームワーク一般について書いたブログポストを紹介します。

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

どのように解決するのですか?

私も最近、あるプロジェクトでJavaScriptのSPAフレームワークを決めなければなりませんでした。

  • エンバー

    私は本当に好きでしたが、使うにはまだ早いと感じました。私が読んだチュートリアルの約半分は、最近テンプレートの動作方法が変更されたため、現在のバージョンで動作しませんでした。

  • バックボーン

    Backbone は、私たちが真剣に検討した最初のフレームワークでした。 なぜ、よく定義された構造を持っていないと思うのか、よく理解できません。 Backbone は、モデルとビューのコードを分割する方法についてかなり明確です。もしかして、アプリのテンプレートのようなものがないということでしょうか?とにかく、Backboneはモデル/RESTバインディングの部分にとても重点を置いていて、ビューバインディングについては何も規定していないようです。もしモデルバインディングが重要で、Railsを使っているなら、これを行うのは簡単なはずです。残念ながら、私のアプリのウェブサービスは本当にマッチしていなかったので、私は自分で .sync.parse メソッドに置き換えます。モデルとビューのコードを分離することは素晴らしいことですが、すべてのバインディングを一から書かなければならないので、その価値はありませんでした。

  • ノックアウト

    KnockoutはBackboneの陽に対する陰のようなものです。Backboneがモデルにフォーカスしているのに対して、KnockoutはMVVMフレームワークであり、Viewにフォーカスしています。 そのため observable ラッパーがあり、JavaScriptのオブジェクトプロパティのために data-bind 属性を使ってプロパティをHTMLにバインドします。 最終的には、ビューバインディングが私たちのアプリに必要なものであったため、Knockoutを使用することにしました。(KnockoutのビューバインディングとBackboneのモデルバインディングが好きなら、次のようなものもあります。 KnockBack もあり、これは両方のフレームワークを組み合わせています。

  • 角型

    Knockoutの後にこれを見ました。残念ながら、私たちは皆、Knockoutがビューバインディングを行う方法にとても満足しているように見えました。 Knockoutよりもずっと複雑でとっつきにくい印象がありました。そして、バインディングを行うためにカスタムHTML属性の束を使用しますが、私はそれが好きかどうかわからない...。なぜなら、このフレームワークを本当に好きな複数の人に出会ったからです。

  • バットマン , メテオ , CanJS , 背骨

    どれもあまり詳しく見ていない。Spineは明示的なControllerオブジェクトを持つBackboneに似たフレームワークで、CoffeeScriptで書かれていることは知っています。

  • あとがき

    前述したように、私たちのプロジェクトではビューバインディングにフォーカスすることがより重要だったため、最終的にKnockoutを使用することにしました。 また、最終的に RequireJS を使ってモジュール化しました。 クロスロード ハッシャー でルーティングと履歴を処理します。 ジャスミン はテスト用、そして JQuery , Twitter Bootstrap そして アンダースコア.js (などがあります(他にも忘れているライブラリがあるかもしれません)。

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