SCPPO(二十八):通过JS实现自动刷新进度

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan

【前言】

    最近接到一个新的需求,这个需求还是蛮人性化的,开始的时候还真是没有思路;然后去网上进行了查找,并在系统中看已有模块有没有实现类似的功能的代码;皇天不负有心人,经过一番探索和实践最终实现了;个人觉得还蛮好玩的,在此与大家共享。

【探索之旅】

     一、需求:

         系统中有个测算功能(参考:《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);
                }
            });
        }
    }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、建立系统思维,经常尝试从全局看问题,久而久之变养成这样的思维习惯。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

当年的春天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值