サーバー側のレンダリングで大量のコンテンツと複製を反応させる

Artru

ReactJS単一シェルでページアプリケーション

  1. サーバー側のレンダリング(SSR)がない、問題を再現するための要件:SSRなし
    ReactJS + WebPack + React-Router
    aspnetコアReactプロジェクトにYeomanジェネレーターを使用し、Startup.csでHotReloadingを無効にしました(または本番モードを実行できました)

    <Route component={ Layout }>
       <Route path='/' components={{ body: Home }} />
       <Route path='/counter' components={{ body: Counter }} />      
    </Route>;
    /* project includes Home.tsx, Counter.tsx and other components/subpages */
    

    Home.tsxの一部:

    class Home extends React.Component<any, void> {
      public render() {
        return <div>
            <h1>Hello, world!</h1>
            <p>Welcome to your new single-page application, built with:</p>
    

    結果

    • main-client.jsホームおよびカウンターコンポーネント(サブページ)のすべてのコンテンツ/レイアウト、および他のサブページのすべてのコンテンツとレイアウトが含まれます。
      これは、1つのサブカテゴリのみを要求した場合でも、アプリケーションのレイアウト全体をロードしていることを意味します。たとえば、Counter
      Webサイトを停止した後でも、webpackedを介してロードされるときにサブページを切り替えることができますmain-client.js

      ここに画像の説明を入力してください

      質問1:現在のページ(アプリケーションシェル+現在のサブカテゴリ)に要求したものだけをロードすることは可能ですか?
      (その後、別のセクションでは、キャッシュされたアプリシェルのために1つの新しいサブカテゴリのみ)
      (おそらく別のルーターと特別な(web-)pack設定を使用)

  2. サーバー側レンダリング(SSR)、問題を再現するための要件:ReduxとSSR
    ReactJS + WebPack + React-Router + SSR
    を使用してaspnetコアReactプロジェクトにYeomanジェネレーターを使用し、Startup.csでHotReloadingも無効にしました(または本番モードを実行できます)

    結果

    • Webサイトのレイアウト全体を2回ロードしているため、さらに悪化しています。最初は完全にレンダリングされたhtmlで、次に内部で main-client.js

    これは、Reactの場合、デフォルトで静的コンテンツ(コントロール内の静的テキスト)と動的コンテンツ(一部の条件付きhtml出力)の間に違いがないことを示しています。したがって、すべての情報が巨大なJSファイル内に配置されます。

    質問2:静的部分についてReactにヒントを与えることは可能ですか?サーバーで一度レンダリングしてクライアントのjavaスクリプトから削除するだけで、動的な計算/コンポーネントのみが残りますか?

================================================== ======

これらの問題は多くのサンプルの中にあり、チュートリアルでは言及されいないため、それほど多くの人がそれを認識していないことは明らかです。

最近の一般的なアプローチの1つは、最初に空のアプリケーションシェルレイアウトをロードし、次にクライアントjavascriptを介してコンテンツのJSONデータをロードすることです。ただし、これらの問題は解決されません。たとえば、最初の問題では、まだ穴アプリのシェルを読み込んでいます。豊富なレイアウトの場合、空のDOM要素が多数含まれる非常に巨大なJSファイルになる可能性があります。

<h1 id="react-hint-for-element-9997">/* here will be header*/</h1>
    <h2 id="react-hint-for-element-9998">/* here will be subheader*/</h2>
        /*and so on and on */
ジョーズ

質問1

Webpackコード分割使用して、アプリをいくつかのバンドルに分割できます。

require.ensure必要なときに(たとえば、ユーザーが新しいルートにヒットしたときに)バンドルを遅延ロードするために提供れます

例(Webpackドキュメントから):

//static imports
import _ from 'lodash'

// dynamic imports
require.ensure([], function(require) {
  let contacts = require('./contacts')
})

質問2

Reactは(まだ)静的コンテンツと動的コンテンツを区別しません。InfernoはReactに似たライブラリであり、この区別を行ってレンダリングパフォーマンスを向上させます。ユースケースには、Reactよりも適している場合があります。

例(Infernoドキュメントから):

import Inferno from 'inferno';
import InfernoDOM from 'inferno-dom';

const message = "Hello world";

InfernoDOM.render(
  <MyComponent message={ message } />,
  document.getElementById("app")
)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クライアント側とサーバー側の両方のレンダリングで同形コンポーネントを反応させる

分類Dev

IISでjsサーバー側のレンダリングとホストを反応させる

分類Dev

高価な初期API呼び出しでサーバー側のレンダリングを反応させる

分類Dev

サーバー側のレンダリングをクライアント側のルーティングに反応させる

分類Dev

Next.jsを使用してサーバー側のレンダリングでクエリを反応させる

分類Dev

react-routerと反応する:要素のコンテンツを置き換えることでコンポーネントをレンダリングする

分類Dev

特定のルートのみをレンダリングするサーバー側に反応する

分類Dev

オーバーレイなしでコンポーネントレンダリングを反応させる

分類Dev

サーバー側でレンダリングされたコンテンツがvueに置き換えられるのはなぜですか

分類Dev

NextJSとReactRouterを使用してサーバー側のReactコンテンツをレンダリングする方法は?

分類Dev

Next.jsで動的ルートをレンダリングするコンテンツの多いサーバー側?

分類Dev

サーバー上でのレンダリング反応

分類Dev

反応でサイドバーとコンテンツの高さを設定する方法は?

分類Dev

Nuxt.jsエラー:クライアント側でレンダリングされた仮想DOMツリーがサーバーでレンダリングされたコンテンツと一致していません

分類Dev

反応レンダリングの「<ツールバー/>」と「{ツールバー()}」の違いは何ですか?

分類Dev

razzle'fs '/' net 'を解決できません(サーバー側レンダリング反応アプリ)

分類Dev

[Vue警告]:クライアント側でレンダリングされた仮想DOMツリーがサーバーでレンダリングされたコンテンツと一致しません(Nuxt / Vue / lerna monorepo)

分類Dev

ルーターコンポーネントのレンダリングを2回反応させる

分類Dev

Reactサーバー側のレンダリングは誤ったコンテンツをレンダリングします

分類Dev

レンダリング出力をコンポーネントではなくHTMLとして反応させる

分類Dev

HTMLコンテンツはフルカレンダーのポップオーバーコンテンツではレンダリングされません

分類Dev

その名前を使用してレンダリングコンポーネントを反応させる

分類Dev

useStateを使用してコンポーネントのレンダリングを2回反応させる

分類Dev

テストライブラリのレンダリングコンポーネントを条件付きで反応させる

分類Dev

2つの配列でレンダリングテーブルを反応させる

分類Dev

コンポーネントのレンダリング配列を反応させる

分類Dev

コンポーネントのレンダリングを2回反応させる

分類Dev

SVGコンポーネントのレンダリングを動的に反応させる

分類Dev

クラスコンポーネントのレンダリングを2回反応させる

Related 関連記事

  1. 1

    クライアント側とサーバー側の両方のレンダリングで同形コンポーネントを反応させる

  2. 2

    IISでjsサーバー側のレンダリングとホストを反応させる

  3. 3

    高価な初期API呼び出しでサーバー側のレンダリングを反応させる

  4. 4

    サーバー側のレンダリングをクライアント側のルーティングに反応させる

  5. 5

    Next.jsを使用してサーバー側のレンダリングでクエリを反応させる

  6. 6

    react-routerと反応する:要素のコンテンツを置き換えることでコンポーネントをレンダリングする

  7. 7

    特定のルートのみをレンダリングするサーバー側に反応する

  8. 8

    オーバーレイなしでコンポーネントレンダリングを反応させる

  9. 9

    サーバー側でレンダリングされたコンテンツがvueに置き換えられるのはなぜですか

  10. 10

    NextJSとReactRouterを使用してサーバー側のReactコンテンツをレンダリングする方法は?

  11. 11

    Next.jsで動的ルートをレンダリングするコンテンツの多いサーバー側?

  12. 12

    サーバー上でのレンダリング反応

  13. 13

    反応でサイドバーとコンテンツの高さを設定する方法は?

  14. 14

    Nuxt.jsエラー:クライアント側でレンダリングされた仮想DOMツリーがサーバーでレンダリングされたコンテンツと一致していません

  15. 15

    反応レンダリングの「<ツールバー/>」と「{ツールバー()}」の違いは何ですか?

  16. 16

    razzle'fs '/' net 'を解決できません(サーバー側レンダリング反応アプリ)

  17. 17

    [Vue警告]:クライアント側でレンダリングされた仮想DOMツリーがサーバーでレンダリングされたコンテンツと一致しません(Nuxt / Vue / lerna monorepo)

  18. 18

    ルーターコンポーネントのレンダリングを2回反応させる

  19. 19

    Reactサーバー側のレンダリングは誤ったコンテンツをレンダリングします

  20. 20

    レンダリング出力をコンポーネントではなくHTMLとして反応させる

  21. 21

    HTMLコンテンツはフルカレンダーのポップオーバーコンテンツではレンダリングされません

  22. 22

    その名前を使用してレンダリングコンポーネントを反応させる

  23. 23

    useStateを使用してコンポーネントのレンダリングを2回反応させる

  24. 24

    テストライブラリのレンダリングコンポーネントを条件付きで反応させる

  25. 25

    2つの配列でレンダリングテーブルを反応させる

  26. 26

    コンポーネントのレンダリング配列を反応させる

  27. 27

    コンポーネントのレンダリングを2回反応させる

  28. 28

    SVGコンポーネントのレンダリングを動的に反応させる

  29. 29

    クラスコンポーネントのレンダリングを2回反応させる

ホットタグ

アーカイブ