SCPPO(二十八):通过JS实现自动刷新进度
2016-11-20 21:37
295 查看
【前言】
最近接到一个新的需求,这个需求还是蛮人性化的,开始的时候还真是没有思路;然后去网上进行了查找,并在系统中看已有模块有没有实现类似的功能的代码;皇天不负有心人,经过一番探索和实践最终实现了;个人觉得还蛮好玩的,在此与大家共享。【探索之旅】
一、需求:系统中有个测算功能(参考:《SCPPO(二十六):测算过程中问题的解决总结》);它的特点是计算复杂需要的时间长,这时候如何反馈给用户该功能进行到什么程度是非常有必要的;而且有利于客户向开发者反馈问题(比如执行在什么地方慢或卡死了等),有利于开发者快速定位和解决问题。
二、实现方式:
1、实现思路:
和组长商讨后决定在页面上用JS来控制实现这个效果,当用户使用该功能时,每1s去数据库中做下检查,查看当前存储过程执行的进度,反回界面显示。
2、实现相关代码:
(1)刷新方法:
function refreshOnTime() {
if (sawId !== "") {
$.ajax({
type: "post",
url: "/JobLog/JobLog/SearchProgress",
data: {
SawId: sawId,
_t: new Date().Format("yyyy-MM-dd hh:mm:ss")
},
dataType: "json",
success: function (e) {
var data = e.res;
if (e.success) {
if ($(data).length === 0) {
$("#msg").text("测算中......");
}
if ($(data).length === 29) {
$("#msg").text("测算成功");
endClock = clearInterval(endClock);
mini.get("cal").enable();
mini.get("issue").enable();
$.ajax({ url: "/XXX/FromSQLToRedis", async: false }); //测算完成后将数据库中的数据和缓存中的数据进行更新-zhanghan-2016年8月5日15:33:40
} else {
var pro = parseInt($(data).length / 29 * 100);
$("#msg").text(pro.toString() + "%");
}
} else {
$("#msg").text("测算失败");
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}
});
}
}
(2)测算调用刷新方法:
//测算方法
function cal() {
var date = mini.get("date").getFormValue();
var companykey = mini.get("Company").getValue();
$("#msg").text("测算中.....");
//当有企业在进行测算时将其他企业的测算和发布置为不可用
mini.get("cal").disable();
mini.get("issue").disable();
sawId = companykey + "_" + date + "_" + new Date().Format("yyyy-MM-dd hh:mm:ss");
$.ajax({
url: "@Url.Action("Calcultion")",
data: {
date: date,
companykey: companykey,
sawId: sawId,
_t: new Date().Format("yyyy-MM-dd hh:mm:ss")
},
type: "post",
success: function (text) {
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}
});
endClock = setInterval(refreshOnTime, 1000); //时间单位为毫秒
}
三、实现效果:
四、遇到问题及解决方案:
1、问题:
效果是达到了,但是当很多企业都停留在这个页面时,对数据库的压力是很大的,于是乎爆发了数据库压力大,导致整个功能几近不能用的状态;参考:《SCPPO(二十九):测算过程中问题的解决总结(续)》;
2、解决方案:
存储过程由于牵扯到的逻辑较为复杂,改起来比较困难,但是可以利用Redis来解决这个问题;相关思路:当企业开始执行测算时修改Redis中一个变量值,也面每1s中检测去Redis中检测,这样大大减小了数据库的压力。
【总结】
1、多站在用户的角度去考虑问题,做出来的系统越人性化越好;2、思路很重要,遇到问题从多方面去思考,权衡各方面的利弊;
3、建立系统思维,经常尝试从全局看问题,久而久之变养成这样的思维习惯。
相关文章推荐
- js实现定时自动刷新功能
- js返回上一页,自动刷新自身、父页面语句的实现
- 表单中的验证码通过js简单实现局部刷新效果
- gulp配置实现修改js、css、html自动刷新
- js 通过cookie实现刷新不变化树形菜单
- javascript(js)自动刷新页面的实现方法总结
- 通过js 实现简单验证码的 刷新 看不清 换一张
- js 通过cookie实现刷新不变化树形菜单
- javascript(js)自动刷新页面的实现方法总结
- js + ajax实现自动刷新界面或局部刷新
- js实现手机端可以上拉刷新,动态通过ajax从后台获取数据
- js实现页面自动刷新方法总结(转)
- 通过js 实现简单验证码的 刷新 看不清 换一张
- js实现iframe的自动刷新
- 利用js实现对页面的自动刷新
- javascript(js)自动刷新页面的实现方法总结
- 通过JS自动隐藏手机浏览器的地址栏实现原理与代码
- 通过JS自动隐藏手机浏览器的地址栏实现原理与代码
- javascript/js 自动刷新页面和页面跳转的实现方法
- android通过service实现更新并显示下载进度条,最后自动安装实例