Я пытаюсь преобразовать некоторые рабочие программы в HTA из Excel, чтобы использовать преимущества графического интерфейса браузера и скорость работы JavaScript по сравнению с VBA. Мой первый тест - добавить таблицу в мой HTML. Однако выполнение около 1000 строк, кажется, занимает около 30 секунд, что кажется много, учитывая, что из-за этого окно браузера HTA перестает отвечать на запросы в течение 30 секунд. Из моих исследований здесь кажется, что мне нужно сделать создание строк, а затем добавить таблицу сразу, чтобы уменьшить количество повторений в DOM. У меня проблемы с этим. Вот код, который у меня есть:
function myFunction() {
var today = new Date();
var t0 = today.getSeconds();
var connection = new ActiveXObject("ADODB.Connection") ;
var table = document.getElementById("myTable");
var connectionstring="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbPATH\\test.accdb;Jet OLEDB:Engine Type=5;Persist Security Info=False;Mode=Share Exclusive;"
connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");
rs.Open("SELECT * FROM TABLE1", connection);
rs.MoveFirst
while(!rs.eof)
{
var row = table.insertRow(1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = rs.fields(1);
cell2.innerHTML = rs.fields(2);
cell3.innerHTML = rs.fields(3);
rs.movenext;
}
rs.close;
connection.close;
var today2 = new Date();
var t1 = today2.getSeconds();
alert(t1-t0);
}
* Edit:
Я подумала, что попытаюсь обновить свой код, добавив DOM только один раз, но мой код все еще занимает много времени, чтобы он не отвечал, но я думаю, что он немного лучше. Я знаю, что это не может быть циклический переход через ado, потому что если я только циклический переход и не пытаюсь что-либо записать на экран, программа завершает создание переменной htmlSTR менее чем за секунду. Так что .after, который слишком медленный.
function myFunction() {
var today = new Date();
var t0 = today.getSeconds();
var connection = new ActiveXObject("ADODB.Connection") ;
var table = document.getElementById("myTable");
var htmlSTR;
var connectionstring="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbPATH\\test.accdb;Jet OLEDB:Engine Type=5;Persist Security Info=False;Mode=Share Exclusive;"
connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");
rs.Open("SELECT * FROM TABLE1", connection);
rs.MoveFirst
while(!rs.eof)
{
htmlSTR = htmlSTR + '<tr><td>' + rs.fields(1) + '</td>'
+ '<td>' + rs.fields(2) + '</td>'
+ '<td>' + rs.fields(3) + '</td></tr>'
rs.movenext;
}
$('#myTable tr:last').after(htmlSTR);
rs.close;
connection.close;
var today2 = new Date();
var t1 = today2.getSeconds();
alert(t1-t0);
}