3

次のようにして、ajax Web アプリケーションの応答時間を短縮しようとしています。

ユーザーが、コンテンツが変更されないページ (Web フォームなど) をリクエストしたとします。ユーザーが別のリクエストを行うと、非表示の div に入れてフォームを「キャッシュ」します。新しい情報を表示する前に。したがって、フォームは基本的にブラウザにロードされたままですが、ユーザーには表示されません。ユーザーが同じフォームを再度要求すると、非表示の div から読み込まれます。これは、フォームのサーバーへのラウンドトリップを行うよりもはるかに高速です。

ブラウザが大量のメモリを保持するようになるため、大量のデータでこれを行うと、おそらくパフォーマンスが低下することを認識しています。ただし、この方法で「キャッシュ」される量に制限を設けます。

今、私は自分でこれを思いついたので、これを行うためのより良い/確立された方法があるかどうか知りたいのです. 期待どおりに機能しますが、考えられる欠点が何であるかはわかりません(おそらくセキュリティ関連ですか?)。

提案をいただければ幸いです。どうもありがとう。

4

5 に答える 5

2

私は前にこれをやったことがあります。便利なテクニックになりえます。データが正確であることと、JS が無効になっているユーザー エージェントをサポートしていることを確認してください。

編集:そして、より良い解決策はありません。

于 2009-12-03T16:45:22.607 に答える
1

これは機能するはずであり、私が考えることができる最良の解決策です。セキュリティに影響があるかどうかは、フォームとその機能によって異なります。実際のコードがないと、誰もこれを診断できません。

于 2009-12-03T16:56:28.203 に答える
1

フォームの HTML コードを JS 変数に格納する方が、この HTML コード (フォーム + フォーム フィールド + さまざまなマークアップ) を解釈する非表示の div を持つよりもおそらく効率的です。

フォーム コードがページと同時に生成される場合は、単純に JS 変数に出力します。

<script language="javascript">
var myFormCode = '<? echo $myFormCode; ?>';
</script>

(それはPHPを使用している場合です...他の言語はそれほど遠くないはずです)

フォーム コードが後で生成される場合は、JSON 経由でテキストとして送信できます。

<?php
  echo json_encode($myFormCode);
?>

...そして、必要に応じてフォームを作成し、クライアント側でそのようなものを作成します:

<script language="javascript">
  myRealFormDiv.innerHTML = eval(myJSONEncodedTextIGotViaAJAX);
</script>

JS コードは明らかに入力する必要があるものではありませんが、おそらく私の言いたいことはわかるでしょう。

于 2009-12-03T16:46:07.783 に答える
-1

これを行う別の方法は、フォームに「Expires」または「Cache-Control」HTTP ヘッダーを設定することです。

url に対して 1 時間後に "Expires" ヘッダーを設定すると、1 時間http://example.com/form.html以内にユーザーが次にそのフォームに移動したときに、サーバーに触れることなく HTML が読み込まれます。

画像/CSS/JS を適切にバージョン管理し、将来の "Expires" ヘッダーも指定すると、サーバー ラウンドトリップが発生せず、残りのページのパフォーマンスが向上します。

于 2009-12-03T17:18:17.747 に答える
-1

APCまたはMemcachedの使用はどうですか?

問題を引き起こす可能性のある「隠れたトリック」を使用せずに、html マークアップをクリーンに保つことができます (ユーザーは css を有効にしていませんか? IE6 を使用していますか? アクセシビリティはどうですか?)

必要に応じて異なりますが、一般的に、ページには含まれている必要があるものだけが含まれている必要があります。

于 2009-12-03T16:51:42.003 に答える