如何加快html元素的更新?

时间:2018-02-14 06:59:45

标签: javascript jquery html

我目前使用以下代码 -

jQuery(window).on('load', function() {
  // read list of items from the table
  ...
  // getting data the DB
  var connectionstring="Data Source=datasource;Initial Catalog=catalog;User 
  ID=userid;Password=pass;Provider=SQLOLEDB";

  connection.Open(connectionstring);
  var rs = new ActiveXObject("ADODB.Recordset");

  rs.Open("select top 10 from db where id in myitems_list")

... 
// display the result
for (currentRow = 1; currentRow < myitems_list.length + 1; currentRow++) { 
    rs.MoveFirst;
    while(!rs.eof)
        if (jQuery(jQuery(".mytable")[1].rows[currentRow].cells[0]).text().trim()==rs.fields(0)) {
jQuery(jQuery(".mytable")[1].rows[currentRow].cells[1]).html(rs.fields(1));
        ...
    }
});

我在这里执行以下操作:

  1. 从表格的第一列中读取项目列表(有ID)
  2. 对于表中找到的每个项目,从数据库中获取数据
  3. 使用从数据库收到的数据更新表格(项目的初始顺序应保持不变)
  4. 更新表格需要几分钟时间。 我该怎么做才能加快表格更新的速度? 或者,可能,我应该把它移到单独的线程?

3 个答案:

答案 0 :(得分:0)

我不确定这个模式的调用是什么,但是你有两个排序的数据集,你想要有效地更新另一个。您可以使用循环遍历每个列表的算法。

以相同的方式对两个列表进行排序,并为每个列表创建一个计数器变量。 将a1的 ith 元素与a2的 jth 元素进行比较。如果相等,则从a2更新a1并增加i和j。如果小于,则增加i。否则增加j。

var a1 = [sorted array];
var a2 = [similarly sorted array];

var i=0, j=0;

while (i < a1.length && j < a2.length) {
  if (a1[i] == a2[j]) {
    // update a1[i]
    i++;
    j++;
  } else if (a1[i] < a2[j]) {
    i++;
  } else {
    j++;
  }
}

答案 1 :(得分:0)

问题在于rs对象上的循环。

当我将代码更改为

// display the result
rs.MoveFirst;
while(!rs.eof) {
    for (currentRow = 1; currentRow < myitems_list.length + 1; currentRow++) { 
        if (jQuery(jQuery(".mytable")[1].rows[currentRow].cells[0]).text().trim()==rs.fields(0)) {
jQuery(jQuery(".mytable")[1].rows[currentRow].cells[1]).html(rs.fields(1));
        ...
        break;
    }
});

它开始快速起作用。

答案 2 :(得分:0)

不需要排序的技术。根据将id映射到html元素的现有内容构建哈希表,然后使用哈希表。

var ht = {};

for (currentRow = 1; currentRow < myitems_list.length + 1; currentRow++) {
        ht[jQuery(".mytable")[1].rows[currentRow].cells[0]).text().trim()] = jQuery(".mytable")[1].rows[currentRow].cells[1];
    }

rs.MoveFirst;
while(!rs.eof) {
  if(ht[rs.fields(0)]) {
    jQuery(ht[rs.fields(0)]).html(rs.fields(1));
  }
  rs.MoveNext();
}