Проблема в том, что у меня используется тулзовина (
CodeThatGrid), которая позволяет генерить интерактивные гриды, как в Excel'е. Функция doStretch() должна пройтись по строке с индексом i и выставить в каждую ячейку некоторое значение (распространить одно и то же введенное пользователем значение). Ситуация становится критической, когда грид содержит большое число столбцов (это необходимо заказчику).
Вот сама функция:
function doStretch(i) {
initProgress();
if ( !(cg instanceof CCodeThatGrid) ) return;
if ( Undef(window.lastStretchPositions) )
window.lastStretchPositions = new Array(NUM_ROWS - 1);
var lastVisibleCellIndex = getLastVisibleCellIndex();
var stretchVal, stretchInitialPos;
for ( var j = 3; j <= lastVisibleCellIndex; j++ ) {
if ( Undef(cg.cells[i][j]) ) continue;
var currentVal = parseFloat( cg.cells[i][j].getData() );
if ( isNaN(currentVal) ) continue;
stretchVal = currentVal;
stretchInitialPos = j;
}
if ( Undef(stretchInitialPos) ) return;
if (stretchInitialPos + 1 > lastVisibleCellIndex) return;
if ( Def(window.lastStretchPositions[i]) ) {
delete lastStretchPositions[i];
}
window.lastStretchPositions[i] = new Array();
var index = 0;
for ( var j = stretchInitialPos + 1; j <= lastVisibleCellIndex; j++ ) {
if ( Undef(cg.cells[i][j]) ) break;
if ( cg.cells[i][j].col.isReadOnly || cg.cells[i][j].isReadOnly ) continue;
cg.cells[i][j].setData(stretchVal);
window.lastStretchPositions[i][index] = j;
index++;
}
releaseProgress();
}
И вот та ее часть, которая отрабатывает мучительно долго:
...
for ( var j = stretchInitialPos + 1; j <= lastVisibleCellIndex; j++ ) {
if ( Undef(cg.cells[i][j]) ) break;
if ( cg.cells[i][j].col.isReadOnly || cg.cells[i][j].isReadOnly ) continue;
cg.cells[i][j].setData(stretchVal);
window.lastStretchPositions[i][index] = j;
index++;
}
releaseProgress();
}