1

そのため、バックエンドでWebサービスを使用してJSONペイロードを送信する単一のアプリケーションに取り組んでいます。このペイロードは、独自のJavascriptMVCフレームワークを介してクライアントにレンダリングされます。

特定のアプリケーションでは、複数ページのフォームウィザードがあります。すべてのページはカスタマイズ可能であるため、すべてのレイアウト情報とデータを送信してデータを入力する必要があります。テンプレートはhtmlに保存され、クライアント側でDOMから削除され、再利用のためにキャッシュされます。

ここで私が一般的に見ているものと異なるのは、フォーム全体のすべてのデータが1回のAjax呼び出しで読み込まれ、アプリが応答する前にすべてがレンダリングされることです。これには(セットアップのサイズに応じて)5、10、20秒かかる場合があります。

フォームが読み込まれると、すべてが非常に速く、見事に機能します。あなたは一度待たずにすべてを乗り越えることができます。その後、最後に到達して送信すると、ajax呼び出しが戻って確認が表示されるまでに10〜20秒かかる場合があります。これは、サーバーに何も送信しないため、最後にすべてを保存します。

要約すると:

巨大なJSONペイロードを取得する(待機)>すべてをレンダリングする(待機)>ユーザーがフォームに入力する(すべてのクライアント側)>ユーザーがフォーム全体を送信する(待機)>確認ページ

ステップ2で費やされる時間の大部分は、すべてをレンダリングします。

これをスピードアップするための私のアイデアはいくつかありました:

1)ajax呼び出しを分割します。フォーム全体を取得する代わりに、各ページに対してajax呼び出しを行い、それらをすべて送信して、そのコールバックメソッドでそのページのレンダリングを開始します。

2)現在、すべてがクライアント側でレンダリングされています。データを待機している間に、サーバー上のページの一部を(別のスレッドで)事前にレンダリングする方法を考えています。

参考までに、ASP.NET環境、バックエンドのASMX Webサービス、クライアント側の社内フレームワークを使用しています。jQueryを利用できます。

4

1 に答える 1

1

私がお勧めするのは、各「ページ」を別々にすることです。ページ全体を取得する必要がある場合は、次のページへのリンクを含む最初のページのみを返します。したがって、json 応答は次のようになります。

{
    "layout":{
        // layout information
    },
    "data": {
        // info to render
    },
    "next_page" : "link/to/next/page"
}

これが返されたら、最初のページをレンダリングし (Web が動作している可能性があります。これについては後で説明します)、「next_page」への AJAX 呼び出しを開始します。「next_page」が提供されなくなるまで (つまり、最後のページになるまで)、各ページに対してこのプロセスを繰り返します。

これにより、ユーザーが各ページを完了する間、後続のページをレンダリングできます。

Web ワーカー(HTML5 機能)

Web ワーカーは JavaScript スレッドを許可します。これにより、UI ループに干渉することなくバックグラウンドでレンダリングを行うことができます。開始するには、この概要をご覧ください

個人的に Web ワーカーを使用したことはありませんが、大規模なレンダリング タスクには使用できるはずです。選択する場合は、まだサポートしていないブラウザーに対して何らかのフォールバックを提供する必要があることを覚えておいてください。

于 2013-03-10T01:25:20.077 に答える