[解決済み] シングルページアプリケーションを構築するためのJavaScriptフレームワーク [終了しました]。
質問
私の目標は、既存の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属性の束を使用しますが、私はそれが好きかどうかわからない...。なぜなら、このフレームワークを本当に好きな複数の人に出会ったからです。
-
どれもあまり詳しく見ていない。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の中から実行するものを選びます。ですから、以下を選ぶよりも、何が必要で何が一緒に機能するかを選ぶことに重点が置かれています。 を選ぶことよりも、必要なもの、一緒に機能するものを選ぶことに重点が置かれています。 フレームワークを選ぶことよりも、何が必要で何が一緒に機能するかを選ぶことに重点を置いています。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ