大报表查询优化 --- 防止频繁点击查询
问题描述:
大报表数据量都比较大,取数过程时间会偏长,为了防止用户频繁点击查询发起请求,影响系统性能,所以希望可以在取数过程中禁止用户点击查询按钮。
解决方法:
这个需求实现思路的话,比如可以是一个 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)
示例代码的页面测试效果为:
当发起查询请求后,用户再次点击查询会提示等待,无法发起新的取数请求:
当取数完毕后,会提示取数完毕,此时可以再次发起取数请求: