我目前使用以下代码 -
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));
...
}
});
我在这里执行以下操作:
更新表格需要几分钟时间。 我该怎么做才能加快表格更新的速度? 或者,可能,我应该把它移到单独的线程?
答案 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();
}