强烈推荐一个大神的人工智能的教程:http://www.captainbed.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、建立系统思维,经常尝试从全局看问题,久而久之变养成这样的思维习惯。

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

  1. 二十八、JS飞机大战demo

    一.第一步:创建地图 分析:创建的地图,要制造飞机一直向上飞行的效果,则要背景无缝循环向下轮播,和之前的无缝轮播一直,只是改变的是top值: Html代码 : <div class=" ...

  2. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  3. FreeSql (二十八)事务

    FreeSql实现了四种数据库事务的使用方法,脏读等事务相关方法暂时未提供.主要原因系这些方法各大数据库.甚至引擎的事务级别五花八门较难统一. 事务用于处理数据的一致性,处于同一个事务中的操作是一个U ...

  4. 计算机英语翻译3000字,英语专四作文满分范文(二十八):计算机翻译

    英语专四作文满分范文(二十八):计算机翻译 2015年专四考试预计4月18日开考,考生们现在应该进入紧张的冲刺复习阶段,专四作文是很多同学感到头疼的,在这里新东方在线整理了英语专四作文满分范文供考生们 ...

  5. JavaScript 编程精解 中文第三版 二十、Node.js

    二十.Node.js 原文:Node.js 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了<JavaScript 编程精解(第 2 版)> A stude ...

  6. 关闭数字健康 android 魅族,数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享...

    数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享 2019-09-06 17:31:22 14点赞 10收藏 15评论 当我还一直在称赞魅族16s所拥有的舒适手感表现时, ...

  7. kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  8. SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  9. Reflex WMS入门系列二十八:空白标签打印

    Reflex WMS入门系列二十八:空白标签打印 贴在托盘上的标签,因托盘上的货物的移动,使用等缘故可能会导致标签丢失.在很多场景下又需要扫描托盘标签,所以Reflex WMS系统提供了打印空白标签的 ...

最新文章

  1. 三圆相交阴影部分面积_这题要证明圆的切线并求阴影面积,分割图形求面积法是解题关键...
  2. 在ubuntu 下 利用svn命令导出 两个版本之间更改的文件
  3. winform中捕获程序未处理的所有异常
  4. 【Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )
  5. Python删除list里面的重复元素的俩种方法
  6. 转载:vscode快捷键
  7. 企业网站前端制作实战教程 JQuery CSS JS HTML 项目需求分析与准备工作
  8. Pytorch的BatchNorm层使用中容易出现的问题
  9. 笨方法“学习python笔记之urlopen
  10. numpy.linspace()的使用方法
  11. WPS Office政府机关单位专用版[安卓+Windows]
  12. 2021京东商城APP手机模板 HTML+CSS+JavaScript
  13. 用摄动法证明fibs的一个公式(变形)
  14. 1000瓶水10只小白鼠问题-面试题目
  15. 【视频MV】laislabonita美丽的海岛*女歌星Alizee(艾莉婕)
  16. 宏定义是什么?为什么要进行宏定义?宏定义的格式
  17. nodejs获取当前连接的网络ip
  18. 25篇最新CV领域综述性论文速递!涵盖15个方向:目标检测/图像处理/姿态估计/医学影像/人脸识别等方向...
  19. 世界经典电影Top 50
  20. 踩坑-helloJs实现google、facebook、twitter等第三方登录

热门文章

  1. 2018 中国互联网哈哈榜之「十大 CP」
  2. 阿里全资收购饿了么,估值 95 亿美元
  3. 全球活跃开发者不足 1500 万,业余爱好者和学生仅占四分之一
  4. 作为程序员的你,除了撸代码,还能干什么?
  5. 第 4 章 MySQL 锁机制
  6. 随机密码生成python_让“全家福”更加随机 —— 自动生成照片布局之Python实现...
  7. onestage方法_FCOS : 找到诀窍了,anchor-free的one-stage目标检测算法也可以很准 | ICCV 2019...
  8. mysql 5.7.13 log_有关binlog的那点事(二)(mysql5.7.13)
  9. mysql可以登陆sqlyog1862_MySQL错误号码1862:your password has expired
  10. 使用use strict指令的目的