大报表查询优化 --- 防止频繁点击查询

问题描述:

大报表数据量都比较大,取数过程时间会偏长,为了防止用户频繁点击查询发起请求,影响系统性能,所以希望可以在取数过程中禁止用户点击查询按钮。

解决方法:

这个需求实现思路的话,比如可以是一个 js 的全局变量 var middleOfQuery = false; ,一执行 _submit(form) 就检查 middleOfQuery ,为真就拒绝查询反馈需要等待;为假就是没有正在查询,则可以查询,并将他设为 true,设置为 true 是查询前,查询后回调自己实现的 fetchEnd() 再设 middleOfQuery 为 false。

示例代码如下,具体中间执行逻辑可以根据自己实际业务需求去调整:

var middleOfQuery = false;
function greet(form1) {
if (middleOfQuery) {
    alert("waitting");
}else {
	alert("chaxun");
	middleOfQuery = true;
	_submit( form1 );
}
  }
function fetchEnd(){
	alert("chaxunwanbi");
	middleOfQuery = false;
}   

比如这段示例代码可以写到 showBigReport.jsp 下面的 js 里,上面查询按钮调用重写后的方法:javascript:greet(form1)

示例代码的页面测试效果为:
当发起查询请求后,用户再次点击查询会提示等待,无法发起新的取数请求:
0R11OGDMY8NR5TYSpng

当取数完毕后,会提示取数完毕,此时可以再次发起取数请求:
MMX2TKU11TD2ND03DOVKDpng