タイマーコントロールが設定された更新パネルがあり、1分ごとにいくつかのデータ更新を自動的にチェックします。
データが更新されたことがわかると、シリアル化されたJSONデータを使用してローカルスクリプトを呼び出すように設定されます。
ScriptManager.RegisterStartupScript(UpdateField, GetType(HiddenField), ACTION_CheckHistoryVersion, "updateData(" & data & ");", True)
ここで、「データ」は次のようになります。
{
"someProperty":"foo",
"someOtherProperty":"bar",
"someList":[
{"prop1":"value"},
{"prop2":"value"}, ...
],
"someOtherList":[{},...,{}]
}
「データ」は非常に大きくなる可能性があり、変更される項目はごくわずかである場合があります。
私が抱えている問題はこれです。これをクライアントに送り返すたびに、新しいスクリプトブロックとして追加され、既存のブロックが削除または置換されることはありません。
出力は次のようになります。
<script type="text/javascript">
updateData({
"someProperty":"foo",
"someOtherProperty":"bar",
"someList":[
{"prop1":"value"},
{"prop2":"value"}, ...
],
"someOtherList":[{},...,{}]
});
</script>
<script type="text/javascript">
updateData({
"someProperty":"foo",
"someOtherProperty":"bar",
"someList":[
{"prop1":"changed"},
{"prop2":"val"}, ...
],
"someOtherList":[{},...,{}]
});
</script>
<script type="text/javascript">
updateData({
"someProperty":"foos",
"someOtherProperty":"ball",
"someList":[
{"prop1":"changed"},
{"prop2":"val"}, ...
]
});
</script>
データに変更があるたびに新しいスクリプトブロックが作成されます。
これを追加し続けると、時間の経過とともにブラウザに蓄積されるデータの量が膨大になる可能性があり、ほとんどの人のブラウザがどのようにデータを取得するかは想像できませんが、それは良いことではないと思います。
このように継続的に追加するのではなく、ブラウザに返送されたコードを置き換える方法があるかどうか誰かが知っていますか?