Jiro Laboratory

C#、ASP.NET、JavaScript、Androidとか

ajax を並列に実行する

同一セッションのリクエストは並列で処理されない

セッションを使用している場合、ASP.NET のデフォルト動作では同一セッションのリクエストは並列で処理されません。

function test(value) {
    $.ajax({
        url: "Page1/Test",
        data: value
    });
}

test(1);
test(2);
test(3);
test(4);

このようなスクリプトを書いても、サーバーサイドの ajax 処理は直列で実行されます。*1
そのため、複数の ajax を同時に呼び出しても並列実行されないためパフォーマンスが出ません。
こういう場合、コントローラーにセッションの読取専用属性(SessionState(SessionStateBehavior.ReadOnly)) を付与することで並列実行が可能になります。
ただし、このコントローラーは Session に書き込むことが出来なくなります。*2

もう少し柔軟に処理したい場合

コントローラー ファクトリを自作することで、静的な属性設定ではなく、動的に SessionState 属性を制御することが可能です。
以下では、リクエストが ajax の場合のみセッションを読み取り専用にしています。

*1:順序は保証されません

*2:Sessionに書き込んでもエラーにはならないが、値は設定されない