ユーザーがチェックボックスをオンにして値の範囲を選択できるフォームがあります。チェックボックスには2つのリストがあり、1つは値として整数を使用し、もう1つは文字列を使用しています。
問題は、チェックボックスで選択した値に基づいて計算結果をユーザーに提示する必要があることです。この計算は非常に遅く、2〜20秒になる可能性があります。
現在、値を計算するajaxリクエストは、ユーザーがチェックボックスをオンにしたときと同じように実行されます。ただし、これにより、クリックするすべてのチェックボックスが要求されます。また、各リクエストで返される計算結果が間違った順序で到着することがあります。これは、最も遅い/最後に到着した応答がユーザーに提示される応答であることを意味します。
選択したチェックボックスと一致する場合にのみ結果を表示するために、ユーザーが選択した値に対する応答を検証する必要はないようです。この問題の最善の解決策はハッシュ値だと思います。しかし、C#とjavascriptの実装で適切なハッシュ関数を見つけるのに少し問題がありました。
結果を返すときにユーザーアクションを返すだけでよいことはわかっていますが、それでもすべての値を比較する必要があり、値の量が非常に大きくなる可能性があります。
最適なのは、サーバーで選択された値のハッシュを生成し、結果が返されたときにクライアントで現在選択されている値のハッシュを生成し、2つを比較すると、結果が選択された値と一致するかどうかを示します。
このようなもの:
$.ajax({
type: 'POST',
url: '/Backend/GetCalculatedResult',
data: { CheckedIntegers: checkedIntegers, CheckedStrings: checkedStrings },
success: function(data) {
if(ResultMatchesSelection(data.SelectionHash)) {
DisplayResult(data.Result);
}
},
dataType: "json",
});
function ResultMatchesSelection(hash)
{
var selectionHash = .. generate hash from selected items;
return hash == selectionHash;
}
最後のユーザーアクションの1秒後にajaxリクエストを実行することで、この問題を部分的に修正しました。そのため、ユーザーが5つのチェックボックスを順番にチェックし、それぞれの間に1秒未満の場合、リクエストは5回ではなく、1回だけ実行されます。
本当に2つの組み合わせが欲しいです。
サーバー側とクライアント側の両方でこのハッシュを実行する方法についてのアイデアはありますか?または、これを別の方法で解決する方法についてのアイデアがある場合は、心を話してください:)