MVCのサーバー側の処理が重かった時の話
環境
Visual Studio 2013
MVC によるWEBシステムでの出来事り
やろうとしてること
クライアント側からCSVをアップロードして、サーバー側でデータの解析・DB登録の処理を行う。
困ったこと
サーバー側での処理に時間がかかると、クライアント側がタイムアウトして、ブラウザがタイムアウト画面になる。
考えた対応策
・サーバーで処理をする前に、クライアント側に処理を返してあげる
・サーバー側の処理速度を改善する
実際にやった対応策
・サーバー側の処理速度をあげる
当初やってたこと
① 受け取ったCSVファイルのデータを分割していく
② 分けたデータ数の回数だけループを回す
③ そのループの中でモデルをnewしてデDBに追加
④ 全データ追加後に最後にDB登録
改善したこと
ループの中でnewしない!
そりゃ重くもなる!
① 受け取ったCSVファイルのデータを分割していく
② モデルの配列を作る(1000個の配列)
③ 分けたデータ数の回数だけループを回す
④ DBにデータを追加する
⑤ 1000件毎にDBの登録処理を行い、ループのカウントをリセットする
⑥ ループを抜けたところでDBに追加したデータの残りを登録する
ネットワークの関係でどうにも通信がうまくいっていない感じがあるけど、ちょっと勉強になった。
ちなみに配列を1万件や500件とかにしてみたけど、1000件くらいがちょうど良い感じで処理が動いていることがわかった。
上の③のなかで、サーバー側にテキストを作成して、そこに進捗状況の件数を出力して、クライアント側で定期的にそのテキストを取得することで、ロード状況の表示ができたー
ソースコードのサンプルは余力あれば後日記載よてい