国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JS+WCF實現(xiàn)進度條實時監(jiān)測數(shù)據(jù)加載量的方法詳解

2024-05-06 16:41:28
字體:
供稿:網(wǎng)友

本文實例講述了JS+WCF實現(xiàn)進度條實時監(jiān)測數(shù)據(jù)加載量的方法。分享給大家供大家參考,具體如下:

背景

由于項目中需要導(dǎo)入大量數(shù)據(jù)到memcache中

需要用WCF調(diào)取11萬條數(shù)據(jù),由于那邊多級聯(lián)查和排序,所以比較慢(1分鐘左右)

同時這邊需要對數(shù)據(jù)進行處理,合并成2萬條數(shù)據(jù),然后存儲,需要一定時間(也是1分鐘左右)

總之,完成這個數(shù)據(jù)導(dǎo)入一共需要1分30秒左右

這時候,需要一個進度條來實時監(jiān)測完成的數(shù)據(jù)量

(之前用的是一個動態(tài)圖,不能知道程序目前的完成量,甚至不知道它是不是卡住了,只能等著)

功能

1.開辟線程,用于加載數(shù)據(jù),處理數(shù)據(jù)
2.前臺實時讀取后臺數(shù)據(jù),并顯示

代碼

view-html

@* 數(shù)據(jù)準(zhǔn)備進度條 *@  <div id="container">    <div class="content">      <h1>數(shù)據(jù)準(zhǔn)備</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>數(shù)據(jù)準(zhǔn)備完成!</p>    </div>  </div>

view-js

$(function () {    $('#initialization').click(function () {      $.messager.confirm('提示', '是否要進行數(shù)據(jù)初始化?', 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;//當(dāng)前數(shù)據(jù)準(zhǔn)備量public bool initializeData(){  bool flag = false;  //定義返回值  //獲得數(shù)據(jù)  //code....code ....code....  load_data_amount = 5;//完成工作量  int page = 0;  int amount = 50000;//一次獲取數(shù)據(jù)量不能超過10萬  while (page * amount == list.Count)  {    //code....code ....code....    load_data_amount = load_data_amount + 5;  }  load_data_amount = 50;//讀取數(shù)據(jù)默認(rèn)的工作量  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;//根據(jù)數(shù)據(jù)改變的完成工作量  }  load_data_amount = 100;//完成工作量  flag = true;  return flag;}//返回當(dāng)前準(zhǔn)備數(shù)據(jù)量public int LoadDataAmount() {  return load_data_amount;}

問題 & 解決

1.進度條生成

解決:使用網(wǎng)上的demo,css+js可以動態(tài)生成,改變數(shù)據(jù)即可

2.線程問題

解決:開始是監(jiān)測使用線程,后來改成處理數(shù)據(jù)使用線程

3.實時監(jiān)測問題

解決:處理數(shù)據(jù)使用線程自動運行,前臺使用ajax不斷查詢后臺的一個變量load_data_amount

4.ajax報錯問題

注意是返回值的類型,以及是result還是result.d,不同情況下是不一樣的

5.數(shù)據(jù)類型問題

解決:讀取數(shù)據(jù)完成的百分比,是用 完成量/所有量 得到的,這里的數(shù)一直算不對,是因為int類型承受不住11萬的運算以及之后的小數(shù),用double和float可以

小結(jié)

本來想著開個線程,加個變量,返回前臺,加一個進度條,讀取變量就OK了

但是中間的這個MVC,這個Spring,這個接口,之前的方法各種不好使,以及在它們下面的運算,ajax……一個一個分開解決,最后還是解決了

分而治之,逐個解決,測試就好

另外,框架和合作在帶來便利的同時,中間的限制和bug也會讓你的效率下降

希望本文所述對大家JavaScript程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 观塘区| 青岛市| 岗巴县| 沙田区| 宜都市| 丰城市| 高阳县| 文山县| 芦山县| 义马市| 民勤县| 茂名市| 宽甸| 稷山县| 芜湖县| 方城县| 徐闻县| 庆云县| 赣州市| 晋江市| 家居| 柯坪县| 沙坪坝区| 信宜市| 新蔡县| 南丰县| 吉林省| 宣汉县| 太谷县| 弋阳县| 昭苏县| 南雄市| 五台县| 曲沃县| 宜黄县| 古交市| 宜丰县| 睢宁县| 左贡县| 安塞县| 榆树市|