サーバー側のページレンダリングを使用すると、どのような利点が得られますか?


19

私はWebアプリを開発していますが、現在、Webサイト全体をhtml / js / cssで記述しており、バックエンドにはRESTFULサービスをホストするサーブレットがあります。すべてのプレゼンテーションロジックは、jsonオブジェクトを取得し、javascriptを使用してビューを変更することで実行されます。

アプリケーションは基本的に検索エンジンですが、異なるロールを持つユーザーアカウントがあります。

PlayやSpringなどのフレームワークを研究しています。私はかなりWeb開発に慣れていないので、サーバーサイドページレンダリングを使用するとどのような利点が得られるのだろうかと考えていましたか?

それは:スピードですか?より簡単な開発とワークフロー?既存のライブラリへのアクセス?もっと?上記のすべて?


4
セキュリティは大きなものです。特に、アプリケーションが動的であり、データベースと通信する必要がある場合。
-Oded

2
@Oded-ページをレンダリングするときとAPIを使用するときのセキュリティの方が簡単なのはなぜですか?私はいつもあなたがプログラムしなければならないものはどちらの方法でも同等であると考えてきましたが、APIを行うときにクライアントを信頼しないことを覚えておくのが(少なくとも私にとって)心理的には簡単です。何かを見落としているなら、本当に知りたいので、私は尋ねています。
psr

1
@psr彼は、ユーザーのセキュリティほどデータのセキュリティに言及していないかもしれません(たとえば、MITMの悪用)。ただ推測。
maple_shaft

1
@psr-同意しました。しかし、ちょうど昨日、OPにJSに接続文字列が埋め込まれていたという質問に答えました
...-Oded

1
@maple_shaft-MITMについて考えることはできますが、APIとサーバー生成HTMLの違いがなぜ起こるのかはわかりません。APIの方がプログラミングの方が便利だと思うので、クラックはやや簡単になりますが、それがあなたの言うことを疑っています。
psr

回答:


16

サーバー側のHTMLレンダリング:

  • 最速のブラウザレンダリング
  • 迅速かつダーティなパフォーマンスの向上としてページキャッシュが可能
  • 「標準」アプリの場合、多くのUI機能が事前に構築されています
  • 通常、コンポーネントはコンパイル時の検証の対象となるため、より安定していると見なされる場合があります
  • バックエンドの専門知識を活用
  • 時には開発が速い*

* UI要件がフレームワークによく適合する場合。


クライアント側のHTMLレンダリング:

  • より低い帯域幅使用
  • 初期ページのレンダリングが遅い。最新のデスクトップブラウザでは目立たない場合もあります。IE6-7または多くのモバイルブラウザ(モバイルWebキットは悪くない)をサポートする必要がある場合、ボトルネックが発生する可能性があります。
  • APIファーストの構築は、クライアントがプロプライエタリアプリ、シンクライアント、別のWebサービスなどになりやすいことを意味します。
  • JSの専門知識を活用
  • 時々開発が速くなる**

** UIの大部分がカスタムで、より興味深いインタラクションがある場合。また、解釈されたコードを使用したブラウザでのコーディングは、コンパイルとサーバーの再起動を待つよりも著しく高速です。


また、mustacheのようなフロントエンド/バックエンドテンプレートシステムを使用した、軽いバックエンド実装を備えたハイブリッドモデルを検討することもできます。


1
おっと、キャッシュの機会を完全に忘れてしまいました!
マイケルK

「「標準」アプリの場合、多くのUI機能が事前に構築されています」これは無関係です。サーバーとクライアントの両方がそれを備えています。
レイノス

@Raynos彼はクライアント側のフレームワークの使用について言及していませんでしたが、彼がそれを使用している場合、それは良い点です。
peteorpeter

1
おかげで、これは主に私が探していた答えです。私はクライアント側のフレームワークをあまり使いませんでしたが、LinkedInの選択に基づいてdust.jsの研究をしていました。私は口ひげが代替手段であることを知っていますが、私はそれをもっと研究します。何らかのハイブリッドを行う可能性があります。主に、パフォーマンスを改善できる場合は、サーバー側にプッシュしたいと思います。再度、感謝します。
user1303881

利点として「クライアント側のHTMLレンダリング」にリストされているものを実際に考慮することはありません。最先端のブラウザ(IE 8など)が考慮されるよりも、「開発の速度が速い場合があります」と表示されることがあります。
nullの

3

サーバー側のHTML生成:

  • デバッグが簡単。
  • ブラウザの互換性に問題はありません。
  • 古典的な全ページサーバー側の生成では、HTMLに大きな不変部分がある場合でも、HTMLをキャッシュするのは困難です。(解決策は、AJAX呼び出しを介してHTMLフラグメントを取得することです);
  • ダイナミックHTMLのキャッシングプロキシとCDNを利用しない。

クライアント側のHTML生成:

  • デバッグが難しい。
  • 廃止されたブラウザに関するいくつかの問題。
  • HTMLテンプレートのクライアント側のキャッシュに問題はありません。
  • HTMLテンプレートとJSコードのキャッシングプロキシとCDNを利用します。
  • はるかに低いネットワーク使用率。

クライアント側の生成は、モバイルサイトが成功した場合に行う方法であることに注意してください。明らかに、最新のブラウザーではより効率的です(WebKitベースのブラウザーはモバイル市場の70〜80%を占めています)。

LinkedInには、dust.jsを例として使用したクライアント側のアプローチの利点に関する記事があります


1
+1最新のスマートフォン(主にwebkit mobileを使用)では、JSがボトルネックになる可能性は低くなりますが、セルネットワーク帯域幅
peteorpeter

1

要件によって異なります。多数の小さなタスクに依存する高性能で低遅延のソリューションが必要な場合は、説明と類似した構造を使用することができます。ただし、Java、PHP、およびC#で最も一般的なソリューションは、これにデフォルト設定されていません。

ほとんどのWebアプリケーションはデータベースに非常に大きく依存しています。そのほとんどがデータベースに依存しているため、少なくとも1回呼び出しを行わないとページをレンダリングできません。いくつかの理由から、データベースを公開したくないのは明らかです。

  • セキュリティ(Odedの言及)- ネットワークを公開することは絶対に望まないでしょう!理想的には、外部からシステムへの唯一のインターフェースはサーバーへのhttpsでなければなりません。
  • 開発のしやすさ-本当に、本当に本当に JavascriptでSQLを書きたくないので、Webプレゼンテーション用に設計された言語はRDBでうまく機能しません。たとえば、状態の概念はありません。

そのため、データベースが必要なときは、Java、C#、PHPなど、それらとうまく機能する言語を使用します。ページを生成する最も簡単な方法は次のとおりです。テンプレート言語(最も有名なPHP、しかし、JSPとASPは他の2つの非常に一般的な言語です)、ページを構築します。この言語は、他のモジュールを呼び出す構成を提供します。PHPでは、これは通常、ページまたは別のPHPファイルにあり、MVCパターンを使用します。JSPでは、スクリプトレットまたはJSP式言語を使用します。これらの他のモジュールは、DBに接続し、ロジックを実行し、ビューレイヤーに値を返すという重い作業に対応できます。最終結果は生成されたHTMLページであり、サーバーでレンダリングされてクライアントに送信されます。

データベースがページレンダラーと同じネットワーク上にある場合、パフォーマンスも向上します。クライアントは1つのリクエストを実行するだけでページを受信します。ユーザーが必要とするすべての情報を取得する前に、10〜15のDBリクエストを実行する必要があります。ネットワークでのミリ秒の遅延は、クライアントがすべてを行う必要がある場合、数秒から数分になります。

システムが大きくなると、懸念事項と中核能力の分離が重要になります。HTMLは表示に適しています。Javascriptは動的コンテンツに適しています。SQLはデータベースのクエリに最適であり、他の言語はビジネスロジックが得意です。開発者としての私たちの仕事は、利用可能なすべてのツールを使用して保守可能なシステムを構築することです。開発の容易さは、優れたシステムの大きな部分です。私の考えでは、パフォーマンスと使いやすさとほぼ同じくらい重要です。優れたシステムは時間とともに進化します。貧弱なシステムは最初からひどく書かれていて、改善されることはありませんでした。


you can't write SQL in Javascript 本当に?!JavaScriptのStackOverflowの質問をたことがありますか?残念ながら違うことをお願いします。確かにそれはあなたがおそらくクライアントコードでやるけど...可能性があり、単一の最悪の事態である
maple_shaft

...また、Node.JSについても忘れていましたが、サーバーJSはまったく異なる動物です。
maple_shaft

どうやら-TIL!ただ...すごい。ただし、言語の乱用について話してください!
マイケルK

2
RESTインターフェースは、クライアントが現在jsonオブジェクトを介してデータベースデータにアクセスする方法です。すべてを公開するわけではなく、このアプリケーションはプライベートエンタープライズネットワークの一部です。インターフェースの利点の1つは、企業内の他のアプリケーションが必要なサービスを活用できることです。開発の観点から、フロントエンドの開発者にhtml / js / cssで好きなようにさせてから、Java開発者によって設計されたRESTfulインターフェースを確認することができます。しかし、私たちのほとんどは混合スキルセットを持っているため、その分割は必要ないかもしれません。
user1303881

3
-1:@MichaelK:想像していたストローマンと話し合っていますが、実際の生活とはまったく関係ありません。RESTfulはHTTPを使用します。JSでSQLを記述する必要はありません。それがRESTfulインターフェイスの目的です。また、RESTfulは、DBクエリと1対1のマッピングがあることを意味しません。あなたの答えは1990年代に有効だったかもしれませんが、今は2012年です。
バルテック

0

モバイルクライアントは通常、電力、帯域幅、およびメモリの制約を受けます。サーバー上でページをレンダリングする方がおそらく良いでしょう。

デスクトップクライアントの場合、js + jsonを送信してクライアントでページをレンダリングしたり、動的に更新可能にしたりすることを検討できます。


しかし実際には、正反対がしばしば真実です。実際、jQuery Mobileプロジェクトは、クライアント側レンダリングのアイデアに完全に基づいています。
先のとがった

@Pointy:はい、これは逆の場合もあります。特定のクライアントで特定のページがどのように動作するかをテストする必要があります。代替へのリンク(「モバイル」および「デスクトップ」バージョンのリンクなど)を提供することも、ユーザーにとって役立つ場合があります。
9000

今日のモバイルの特徴は、低帯域幅や処理能力よりも待ち時間が長いことです。私が最近取り組んだプロジェクトでは、レンダリング速度よりもページサイズに関心がありました。最新の携帯電話はかなり良いです。
マイケルK

@Pointy jQuery Mobileプロジェクトは、使用すべきではない恐ろしいコードの山でもあります。!人気==値
レイノス

@Raynos実際にJquery Mobileを使用していますが、かなり成功しています。私たちが知らないことを知っていますか?;)
マイケルK

0

サーバー側レンダリングの大きな利点の1つはアクセシビリティです。javascriptベースのアプリは、視覚のない人々にとって依然として大きな問題です。それに、「googlebot」と呼ばれるこの盲目の男がいます。彼はjavascriptもうまくやっていない。


良い点は、このアプリケーションはプライベートなのでSEOを必要としませんが、いくつかの個人用アプリも開発していることです。
user1303881

Googlebotはかなりの時間のためにJS / AJAXの解釈が行われます。searchenginewatch.com/article/2122137/...
vartec

@vartec:その記事の重要な意味は、「AJAXとJavaScriptを介して実装された特定の動的コメントを読んで理解できるようになった」と思います。私の疑いは、それがdisqusとfacebookをカバーしているが、カスタムAjaxセットアップはカバーしていないことです。
ワイアットバーネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.