タイムアウトさせない

海外の某販社専用のWebシステムの「インポート機能」を強化。

ファイルをアップロードしてDBに書き込む処理であるが、アップロード後のデータプレビューページでsubmitさせることで、DB書き込みページがロードされるようになっている。

しかし、このDB書き込みが完了するまではsubmitする前のページが表示されたままになってしまうため、単純にsubmitさせるのではなく、javascriptで「実行中」(実際は英文表記)のメッセージを表示させ、かつ「submit」のボタンを非表示させてからsubmitさせている。

データ件数が少ないうちはこれで良かったのだが…

100件程度処理させたいという要望に合わせて、IISのタイムアウトの時間設定を変更したのだが、200件とか300件(またはそれ以上)の処理をさせたいという要望が来た。再び単純にタイムアウトの時間設定を伸ばすというのは芸が無さすぎ。submitした後に何もページが変わらずひたすら待たされると言うのはユーザビリティ的にもイマイチ。

ということで、処理件数の制限を無くし、かつ、ユーザビリティ的にも良い感じのものをなんとかしましょう。

ここは一発「Ajax」でやろうかと思ったが、今回は遊びではないため自粛。DBへの書き込みを全データまとめてやろうとするから時間が掛かるわけで、一件一件バラして処理させれば良いだけのこと。

方法としては、アップロードしたファイルの何件目をDBに書き込むのかを「DB書き込みページ」にパラメータで渡してやり、その都度、処理完了メッセージを表示させる。メッセージ表示後に再び「DB書き込みページ」を呼び出す。これをデータ件数分繰り返す。データプレビューページにインラインフレームで「DB書き込みページ」をロードさせることで、大げさなページ換えをしなくて済む。どこまで処理されたのか途中経過が随時表示されるため、利用者にも安心感を与える。

タイムアウトの心配が無くなった事で「300件なんて遠慮せずに1000件でも大丈夫ですよ〜」と責任部署には連絡しておいた。



関連エントリー