poi导出excel遇到的有关问题

poi导出excel遇到的问题
我用的springmvc+ibatis,主要代码如下:

//获取要查询的结果集
List list = this.indexOfTreeService.queryForRealEvent(paraMap); 
String templateFile = "公司人员信息统计.xls";
String[] keys = {"BUREAU_NAME","OE_ID","OE_TYPE_NAME", "IP_NAME", "PIST", "PIET", "RIST", "RIET","VOL_LEVEL","OUTAGE_EXTENT"};

//模板文件
String realFilePath = CommonUtil.getAbsolutePathByClass(this.getClass()) + "/excelTemplate/"+ templateFile;
// 导出文件名
String fileName = templateFile;
// 根据模板文件生成工作薄
HSSFWorkbook workbook = null;
HSSFSheet worksheet = null;
workbook = new HSSFWorkbook(new FileInputStream(realFilePath));
worksheet = workbook.getSheetAt(0);
for (int i = 0; i < dataList.size(); i++) {
   //中间逻辑省略
}
OutputStream out = response.getOutputStream();
response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
response.setContentType("application/msexcel;charset=UTF-8");
workbook.write(out);
out.close();

上面的代码已经完成导出excel功能,但是在测试过程中发现如下问题:
List list = this.indexOfTreeService.queryForRealEvent(paraMap); 这个结果集结果很大,执行这个查询大概需要花费30秒左右,等执行到workbook.write(out);的时候页面才会弹出保存的对话框,所以当在页面点了导出以后要30多秒后才会弹出保存对话框,这样的用户体验很差,有没有好点的解决办法。
------解决思路----------------------
1.这个List到底有多大,查询时间需要30s这么久,可以考虑优化SQL语句;
2.如果查询真的很耗时间且无法优化,那就以异步的方式通知用户,可以参考浏览器的下载功能;
------解决思路----------------------
那就先弹保存对话框再有进度条提示正在保存状态。