web-dev-qa-db-ja.com

サーバー生成のフロントエンドアプリケーションとは対照的に、Webアプリケーションのクライアント/サーバーアーキテクチャの利点は何ですか

弊社では、組み込みLinuxプラットフォーム上にWebインターフェイスを構築する必要があります。私は一種の2つのオプションを見ます:あなたはHTMLとJavaScriptがサーバー側で生成される技術を使用します(JSP、Grailsを考えますが、C++を使用してHTML/JavaScriptを生成するものです)、またはHTML5 'クライアント'を作成しますJSONまたはXML生成バックエンドと通信するアプリケーション。

私は現在、Webアプリケーションは後者に対応する傾向があると感じていますが、そうすることの利点は何ですか(プロジェクトの開発者は、主にHTMLやJavaScriptよりもC++をよく知っているという事実に基づいて、前者を選択します)

13
Wim Deblauwe

AJAX

結局のところ、「私のWebアプリケーションはクライアント側とサーバー側のどちらでHTMLを生成する必要がありますか?」クライアント側の生成はAJAXを使用してサーバーと通信しますが、X(XML)は一般にJSONに置き換えられていますが、ほとんどの人はそれをAJAXと呼んでいます)音が良いためです。サーバー側、サーバーはサーバー上でHTMLを作成するだけです。

私はXMLについて多くの経験を持っていますが、JSONについてはほとんど経験がありません。 XMLについて知っているすべてのことから、可能であればJSONを使用することをお勧めします。

AJAXプロ:

  • HTTP(S)経由で送信するデータを減らして、より高速に実行できるようにします。
  • サーバーは基本的にWebサービスなので、他の人(またはあなた)は自分のクライアントを作成できます。これは、サイトのモバイルバージョンを作成するときに役立ちます。また、多くの発明は、作成者が意図しなかった理由で人気を博しています。サービスは、コードの新しい用途を見つける人々にとってより親しみやすいものです。
  • 新しいアプリケーションのようです

AJAXの短所:

  • JavaScriptのデバッグ
  • 複雑?
  • JavaScriptでできることは、多くの場合、視覚障害者や障害者が使用することは完全に不可能です。
  • 合計でより多くのコードが必要になる場合があります(組み込みデバイスの全体的なストレージが大きくなります)

クライアントサーバー

すべてのWebアプリケーションは、クライアントサーバーアーキテクチャを使用します。 HTTPプロトコルは、Webアプリケーションがそのように動作するように強制します。 AJAXは、その設計上の制限に対して回避策を使用していますが、HTTPの基本的なモデルは依然としてクライアント/サーバーです。適用するための最良の方法についてのすべてに夢中になることはありません。 WebアプリケーションへのMVC。政治的な理由でMVCを実行する必要がある場合は、Ruby/Railsがどのように実行するかを確認してください。実際には、Railsはコピー(または使用)に最適なアーキテクチャです)。

サービスとアプリ.

ほとんどの場合、優れたサービスはアプリケーションよりも優れています。しかし、良いサービスを作るのは難しいです!サービスの十分に設計された仕様を作成する前に、アプリケーションを作成する必要がある場合があります。必要以上に仕事を難しくしないでください。バージョン1では、優れたアプリケーションの作成に焦点を当てます。アプリケーションが比較的安定していて、それがユーザーの要件を満たしていると確信できるまでは、サービスを提供しても何の役にも立たないでしょう。間違ったサービスを設計するのが早すぎると、サービスインターフェースを修正し、その後に続くサーバーコードとクライアントコードの両方の大規模なリファクタリングに対処するときに無駄になり続ける時間の無駄です。

C/Web

ワオ。私はCおよびAssemblyで3年間働いた後、Web開発に切り替えました。特にセキュリティの観点から、Webアプリケーションを作成するための悪い言語は考えられません。入力検証と出力エスケープは非常に重要です... [〜#〜] sans [〜#〜] は、毎年最も一般的なエラーのリストをリリースします。バッファオーバーフロー、インジェクション、クロスサイトの問題(不適切な出力エンコーディング)...これらのエラーはすべて、Cまたはアセンブリで非常に簡単に発生します。少なくともJavaのような言語には、オーバーフローの影響を受けない文字列と、一般にオフバイワンエラーによって悪意のあるコードがシステムメモリにアクセスすることを防ぐ例外処理メカニズムがあります。処理は言うまでもありません。国際文字セット(可能な場合は TF-8 を使用)。

メモリまたはファームウェアの理由でCを使用する必要がある場合は、それを行う必要があります。注意してください!

ブラウザのサポート

Webアプリケーションを作成する最初のステップは、yourクライアントが使用するブラウザーを見つけることですか? W3SchoolsWikipedia はどちらも一般統計の優れた情報源ですが、YMMVです。

現在私が作業している場所では、アプリケーションが有効なXHTML 1.0移行HTMLのみを作成することを確認しています。また、IEの互換モードを回避するために必要な特定のDoctypeとフォーマットを使用しているため、クロスブラウザーHTMLを簡単に記述できます( my blog のヒントを参照)。私たちは最新の3バージョンのIEに加えて、FirefoxとChrome WindowsおよびLinuxでテストします(SafariはChromeと同じレンダリングエンジンを使用します)。この検証とテストにより、アプリケーションはどこでも動作します(Windows、Mac、Linux、iPhone、Androidなど)BlackBerryを除く。

BlackBerryには、JavaScriptを搭載した実際のブラウザが存在したことがないため、サポートしていません。 BlackBerryユーザーは、実際のWebブラウザーがないことに慣れているので、文句はありません。多分それは変わっていますか?いくつかのクライアントに、使用しているブラウザーを尋ねて、それらのブラウザーでテストすることを確認します。

概要

すべてのWebサイトはHTMLとHTTPに基づいて構築されています。アプリケーションを作成している間は、これらのテクノロジーの適切なリファレンスを手元に用意してください。アプリケーションを作成する過程で、ツールキットを使用しても、これらのテクノロジーを解決するためにこれらのテクノロジーの基本を理解する必要がある問題に遭遇します。

きちんと見えて素早く反応するものを作るために、CSSと画像圧縮にも慣れている必要があるでしょう。 JavaScript、Webサーバー、およびブラウザーは、最終的に必要となる追加の知識領域です。

サーバーサイドでHTMLを構築する場合、コードベースはおそらく小さくなり、JavaScriptを学ぶ必要がない場合があります。サーバー側モデルは、プログラマーが(C?)コードを記述して、クライアントに送信する前に直接見ることができるHTMLを生成することを意味します。 AJAXモデルは、プログラマーがHTMLを生成するJavaScriptを作成することを意味します。JavaScriptによって生成されたHTMLコードをブラウザー内で検証または表示するための多くのツールを私は知りません。正しくプログラムするのはより困難です。

私が現在作業している場所では、JavaコードがHTMLを生成するJavaScriptを生成するコードが含まれる場合があるハイブリッドアプローチを使用しています。皆さんがWeb開発に不慣れな場合は、ここから始めません。私はそう思います。 AJAXモデルを使用する説得力のある理由がない限り、私は古いサーバー側のHTML生成モデルから始めて、それがどれだけ遠くまで到達するかを確認します。

4
GlenPeterson

後者には、「バックエンド」を一般的な「データサービス」にするという利点があります(コンテキストでの意味が何であれ)。

HTMLクライアントは、そのデータの多くの可能なコンシューマーの1つにすぎません。 iOSアプリ、Andriodアプリ、Windows 8アプリ、APIなどを他の消費者と同じように考えてください。

13
treecoder

Webアプリケーションの一般的な方法として、両方を組み合わせて、どちらか一方を管理する方法が増えています。

firstアプローチはより伝統的であり、何年も前から存在し、十分に文書化されています(ただし、C++は一般的に人気のある言語ではありません)。

secondオプションはより近代的で、最近の開発ブログやフォーラムにあります。その理由の1つは、同じアプリケーションを他のインターフェース、モバイル、サービスAPIに提供する必要性が高まっていることです。 2番目のアプローチtendsは、クライアントによりリッチで応答性の高いものを目指しています。

全体として、それはチームの親しみやすさやビジネスケースなどの他の制約に依存します。

オプションの評価に役立ついくつかの質問:

  1. チームには言語とプラットフォームの経験がありますか?
  2. チームは新しいアプローチとテクノロジーを学ぶ用意がありますか?
  3. アプリケーションは他のデバイス(iPhone、Android、Windows 8など)でプログラムしやすくなるという利点を活用していますか?
  4. サービスまたはデータと統合された他の内部または外部アプリは、アプリケーションで利用できますか?
6
RMalke

そのような「イントラネット」アプリケーションでは、ExtJS4でファットクライアント(JavaScript/HTML5-app + JSON)アプローチを使用します。

通常の「インターネット」ウェブサイトでは、より「古典的な」アプローチを使用します。

クライアントはとにかくサイトをレンダリングする必要があるので、プロセス全体で課金し、データを入力するだけでいいのです。応答を生成するためのサーバーコード(単純なJSONまたはXML)を単純に使用するため、パフォーマンスが節約されます。また、常にサーバーよりも多くのクライアントがあるため、より多くの作業がクライアントによって行われる場合、システム全体のスケールが大幅に向上します。

クライアントコードはHTTPで配信されるため、不明瞭な更新メカニズムがなくても、新しいバージョンをユーザーに簡単に送信できます。 (HMTL/JS/CSSを置き換えるだけです)

私が通常のウェブサイトで古典的なアプローチを好む唯一の理由は、検索エンジンです。

5
K..