JS+WCF实现进度条实时监测数据加载量的方法详解


Posted in Javascript onDecember 19, 2017

本文实例讲述了JS+WCF实现进度条实时监测数据加载量的方法。分享给大家供大家参考,具体如下:

背景

由于项目中需要导入大量数据到memcache中

需要用WCF调取11万条数据,由于那边多级联查和排序,所以比较慢(1分钟左右)

同时这边需要对数据进行处理,合并成2万条数据,然后存储,需要一定时间(也是1分钟左右)

总之,完成这个数据导入一共需要1分30秒左右

这时候,需要一个进度条来实时监测完成的数据量

(之前用的是一个动态图,不能知道程序目前的完成量,甚至不知道它是不是卡住了,只能等着)

功能

1.开辟线程,用于加载数据,处理数据
2.前台实时读取后台数据,并显示

代码

view-html

@* 数据准备进度条 *@
  <div id="container">
    <div class="content">
      <h1>数据准备</h1>
    </div>
    <!-- Progress bar -->
    <div id="progress_bar" class="ui-progress-bar ui-container">
      <div class="ui-progress" style="width: 3%;">
        <span class="ui-label" style="display: none;">完成量<b class="value">3%</b></span>
      </div>
    </div>
    <!-- /Progress bar -->
    <div class="content" id="main_content" style="display: none;">
      <p>数据准备完成!</p>
    </div>
  </div>

view-js

$(function () {
    $('#initialization').click(function () {
      $.messager.confirm('提示', '是否要进行数据初始化?', function (r) {
        if (!r) {
          return;
        }
        else {
          $('#container').show();
          var t1 = window.setInterval(process_bar, 1500);
        }
      });
    });
});
function process_bar() {
    $.ajax({
      type: "POST",
      async: true,
      url: "/Paper/LoadData",
      success: function (result) {
        $('#progress_bar .ui-progress').animateProgress(result);
        if (result =="100") {
          $('#main_content').slideDown();
          $('#fork_me').fadeIn();
          setTimeout(function () { $('#container').hide();; }, 1500);
          window.clearInterval(t1);
        }
      }
    })
}

controller

static bool flag = true;
public int LoadData()
{
  int result = Ipaperbll.LoadDataAmount();
  if (flag)
  {
    Thread thread = new Thread(new ThreadStart(ThreadLoadData));
    thread.Start();
    flag = false;
  }
  return result;
}
private void ThreadLoadData()
{
  Ipaperbll.initializeData();
}

后台

static int load_data_amount;//当前数据准备量
public bool initializeData()
{
  bool flag = false;  //定义返回值
  //获得数据
  //code....code ....code....
  load_data_amount = 5;//完成工作量
  int page = 0;
  int amount = 50000;//一次获取数据量不能超过10万
  while (page * amount == list.Count)
  {
    //code....code ....code....
    load_data_amount = load_data_amount + 5;
  }
  load_data_amount = 50;//读取数据默认的工作量
  double totalamount = list.Count();
  foreach (var item in list)
  {
    //code....code ....code....
    load_data_amount = Convert.ToInt32((1 - (totalamount--) / double.Parse(list.Count().ToString())) * 50) + 50;//根据数据改变的完成工作量
  }
  load_data_amount = 100;//完成工作量
  flag = true;
  return flag;
}
//返回当前准备数据量
public int LoadDataAmount() {
  return load_data_amount;
}

问题 & 解决

1.进度条生成

解决:使用网上的demo,css+js可以动态生成,改变数据即可

2.线程问题

解决:开始是监测使用线程,后来改成处理数据使用线程

3.实时监测问题

解决:处理数据使用线程自动运行,前台使用ajax不断查询后台的一个变量load_data_amount

4.ajax报错问题

注意是返回值的类型,以及是result还是result.d,不同情况下是不一样的

5.数据类型问题

解决:读取数据完成的百分比,是用 完成量/所有量 得到的,这里的数一直算不对,是因为int类型承受不住11万的运算以及之后的小数,用double和float可以

小结

本来想着开个线程,加个变量,返回前台,加一个进度条,读取变量就OK了

但是中间的这个MVC,这个Spring,这个接口,之前的方法各种不好使,以及在它们下面的运算,ajax……一个一个分开解决,最后还是解决了

分而治之,逐个解决,测试就好

另外,框架和合作在带来便利的同时,中间的限制和bug也会让你的效率下降

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js 创建书签小工具之理论
Feb 25 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
Bootstrap轮播插件使用代码
Oct 11 Javascript
js 数字、字符串、布尔值的转换方法(必看)
Apr 07 Javascript
React学习笔记之条件渲染(一)
Jul 02 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 Javascript
Layui table field初始化加载时进行隐藏的方法
Sep 19 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 Javascript
jquery自定义显示消息数量
Dec 19 #jQuery
基于Vue开发数字输入框组件
Dec 19 #Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 #jQuery
从setTimeout看js函数执行过程
Dec 19 #Javascript
mongoose更新对象的两种方法示例比较
Dec 19 #Javascript
jquery中done和then的区别(详解)
Dec 19 #jQuery
JavaScript实现AOP详解(面向切面编程,装饰者模式)
Dec 19 #Javascript
You might like
php str_pad 函数用法简介
2009/07/11 PHP
第五章 php数组操作
2011/12/30 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
总结js函数相关知识点
2018/02/27 Javascript
python daemon守护进程实现
2016/08/27 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
opencv python图像梯度实例详解
2020/02/04 Python
Python如何输出百分比
2020/07/31 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
AURALog面试题软件测试方面
2013/10/22 面试题
个人实用的自我评价范文
2013/11/23 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
检查接待方案
2014/02/27 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
公司董事长岗位职责
2014/06/08 职场文书
妈妈活动方案
2014/08/15 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
生活委员竞选稿
2015/11/21 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书