首頁  >  文章  >  web前端  >  在JS+WCF中如何實現監測資料載入量

在JS+WCF中如何實現監測資料載入量

亚连
亚连原創
2018-06-19 17:20:031520瀏覽

這篇文章主要介紹了JS WCF實現進度條實時監測數據加載量的方法,結合實例形式分析了大量數據導入過程中前台js與後台WCF交互實現實時顯示加載進度的相關操作技巧,需要的朋友可以參考下

本文實例講述了JS WCF實現進度條即時監測資料載入量的方法。分享給大家供大家參考,具體如下:

背景

#由於專案中需要導入大量資料到memcache中

需要用WCF調取11萬個數據,由於那邊多級聯查和排序,所以比較慢(1分鐘左右)

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

總之,完成這個數據導入一共需要1分30秒左右

這時候,需要一個進度條來實時監測完成的資料量

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

功能

1.開闢線程,用於載入數據,處理數據
2.前台即時讀取後台數據,並顯示

#程式碼

view-html

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

view-js

$(function () {
    $(&#39;#initialization&#39;).click(function () {
      $.messager.confirm(&#39;提示&#39;, &#39;是否要进行数据初始化?&#39;, function (r) {
        if (!r) {
          return;
        }
        else {
          $(&#39;#container&#39;).show();
          var t1 = window.setInterval(process_bar, 1500);
        }
      });
    });
});
function process_bar() {
    $.ajax({
      type: "POST",
      async: true,
      url: "/Paper/LoadData",
      success: function (result) {
        $(&#39;#progress_bar .ui-progress&#39;).animateProgress(result);
        if (result =="100") {
          $(&#39;#main_content&#39;).slideDown();
          $(&#39;#fork_me&#39;).fadeIn();
          setTimeout(function () { $(&#39;#container&#39;).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也會讓你的效率下降

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

使用jQuery如何解決動態新增元素無法觸發綁定事件

在Node中如何取得Excel內容

在node中中間服務層如何傳送請求(詳細教學)

#

以上是在JS+WCF中如何實現監測資料載入量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn