2016-12-09 10 views
1

反応サーバー側のレンダリングでは、レンダリングされたHTMLは、状態が完全に読み込まれた後にのみクライアントに送信されますか?サーバ側のレンダリングが非同期呼び出しが完了するのを待ちますか?

たとえば、ユーザーが複数の非同期API呼び出しを持つページを要求した場合、クライアントはパッケージ化されたHTMLを受け取る前にそれらのAPI呼び出しが完了するのを待つ必要がありますか?

これが間違っている場合は、要求されたページのAPI呼び出しが遅い場合、空のブラウザウィンドウを見たままにすることができますか?すなわち、サーバはクライアントに応答を送る前にAPIコールが終了するのを待っている。

私はhttp://redux.js.org/docs/recipes/ServerRendering.htmlのドキュメントを読んだことがありますが、正しく解釈しているかどうかはわかりません。誰かが私のためにこれを明確にしてもらえますか?

答えて

0

単語:NO。 ReactDOMServer.renderToStringは、非同期コールアウトオブボックスをサポートしていません。

何ができることは、データをプリフェッチし、例えば、クライアントに送り返し、その後、HTMLでそれを入れている:

<script> 
    window._preFetchedData = {"somedata": {"post": {//... 
</script> 

ので、ページがブラウザに送信されたときに、フロントエンドがすべきpreFetchedDataを読み込んで読み込みます。

私の意見では、React virtual-domは、サーバー側のレンダリングの問題に対するソリューションの半分(1/3?)しか提供していませんでした。 サーバー側のレンダリングを達成するには、データフロー管理に大きな努力が必要です。多くの場合、その価値はありません。

+0

Mingさんにお返事ありがとうございます。プリフェッチされたデータはデータでなければならないのですか、それとも何らかのコールバックになる可能性がありますか?私が尋ねる理由は、ユーザーがサーバーがすべてのデータをプリフェッチするのを待たなければならないこと、APIが遅い場合はどうしたらいいのでしょうか?すべての初期データが取得されるまで、ユーザーは読み込みブラウザを使用したままになります。これは意味がありますか?この状況がどのように引き渡されるのか説明できますか? – whiteElephant

+1

@whiteElephantプリフェッチされたデータは通常のデータでなければなりません。私はあなたの懸念を理解します。サーバサイドレンダリングの目的は、最終的には次のようなことです。1. AFT(折り畳み時間を超える)を減らす。 2. SEO。したがって、プリフェッチされたデータは、ユーザが最初の視界を見るために必要なデータのみを含むべきである。クライアント側の通常のAJAX呼び出しを使用して、後続のすべてのデータ(たとえば、ユーザーの対話によって引き起こされる)が検索されます。 – Ming

+0

@whiteElephant通常のSPAでは、Webページが読み込まれると、ブラウザはAJAX呼び出しを呼び出します。ユーザーは必要なAJAX呼び出し(ユーザー名、ブログ投稿など)を待つことで時間を費やす(往復時間が支配的です)。サーバー側レンダリングを使用すると、AFTが全体的に減少するように、ほとんどのラウンドトリップ時間をなくすことができます。 – Ming

関連する問題