13

私は大規模なWebサイトで作業しており、多くの機能をクライアント側に移動しています(Require.js、Backbone、Handlebarsスタック)。すべてのレンダリングをクライアント側に移動する可能性についての議論もあります。

しかし、いくつかの記事、特にTwitterがクライアント側のレンダリングから離れることについての記事を読んで、サーバー側がより高速で信頼性が高いと述べているので、私は質問をし始めます。JSONとテンプレートからJSでかなり単純なHTMLウィジェットをレンダリングすることが、4〜8 GBのRAMを備えたデュアルコアCPUでの最新のブラウザーであり、サーバー側のアプリに数十のインクルードを作成するよりも遅いことを理解していません。これに関する実際のベンチマークの数値はありますか?

また、サーバー側のテンプレートエンジンによるHTMLテンプレートの解析は、Handlebarsテンプレートから同じHTMLコードをレンダリングするよりも高速ではないようです。特に、これがプリコンプJS関数の場合はどうでしょうか。

4

3 に答える 3

9

多くの理由があります:

  1. JavaScriptはインタプリタ言語であり、サーバー側よりも低速です(通常はコンパイル言語で実行されます)
  2. DOMの操作は遅く、JSで操作すると、パフォーマンスが低下します。これを克服するには、テキストでレンダリングを準備してから評価するなどの方法があります。これにより、実際にはサーバー側のレンダリングに近づくことができます。
  3. 一部のブラウザ、特に古いIEは遅すぎます
于 2012-10-28T04:30:49.330 に答える
4
  • コンパイルされた言語とインタプリタされたJavaScriptのパフォーマンス
  • キャッシング、つまり、別のユーザーがすでに要求したのとまったく同じページを提供することで、各クライアントがページをレンダリングする必要がなくなります。トラフィックの多いサイト、つまりニュースサイトに最適です。マイクロキャッシングは、ほぼリアルタイムの更新を提供することもできますが、キャッシュからの大量のトラフィックを処理します。クライアントのレンダリングを待つ必要はありません
  • 古いコンピューターや低速/機能不全のブラウザーを使用しているユーザーへの依存度が低い
  • レンダリングについてのみ心配する必要があり、さまざまなブラウザーがDOMを管理する方法への依存度が低くなります(信頼性)

ただし、複雑なUIの場合、インタラクションのクライアント側のレンダリングにより、よりスッキリとしたユーザーエクスペリエンスが提供されます。

最適化しようとしているパフォーマンスと、ユーザー数によって異なります。

于 2012-10-28T04:53:42.167 に答える
1

クライアント側でコードを実行するには、最初にコードをロードする必要があります。サーバー側のコードはサーバーの起動時にロードされるだけですが、クライアントコードはページが起動するたびにロードされる可能性があります。いずれの場合も、ファイルがすでにキャッシュされている場合でも、ページをロードするときにコードを解釈する必要があります。ブラウザにJS解析ツリーのキャッシュがある場合もありますが、それらは永続化されていないため、長持ちしません。

これは、JavaScriptがどれほど高速であっても(そして非常に高速であっても)、ユーザーが待機している間に作業を実行する必要があることを意味します。多くの調査によると、ページの読み込み時間は、サイトの品質と関連性に対するユーザーの認識に大きく影響します。

結論として、通常の開発者環境でクリーンなキャッシュからページをレンダリングするには、最大で500ミリ秒かかります。低速のデバイスとネットワークでは、ほとんどのユーザーがそのラグをほとんど受け入れられません。

したがって、ページの読み込み中にJavaScriptで処理するのに50〜100ミリ秒かかる可能性があります。すべて、総計です。つまり、複雑なページをレンダリングするのは簡単ではありません。

于 2017-04-06T12:28:32.463 に答える