성능저하요인 : 루프 돌리면서 값 설정건

2021. 11. 1. 13:35IBSheet7/성능개선

아래와 같이 루프를 돌면서 특정 조건에 해당하는 값(체크박스 타입) 설정하는 코드는

반복되는 횟수만큼 Dom객체 접근 및 체크박스 css변경이 일어남으로 엄청난 성능저하를 불러일으킨다.

 // asis
 for(var i=ibsStdOlgDtl.GetDataFirstRow(); i<=ibsStdOlgDtl.GetDataLastRow(); i++){
    if(minVal <= ibsStdOlgDtl.GetCellValue(i, "olgMer") && ibsStdOlgDtl.GetCellValue(i, "olgMer") <= maxVal) {
      ibsStdOlgDtl.SetCellValue(i, "ibCheck",checkedVal) ;
    }
 }

따라서 IBSheet에서 제공하는 RangeText 또는 RangeValue 함수를 통해 일괄적으로 값을 설정하는 방법을 권장 하며

사용방법은 다음과 같다.

 // tobe
 var firstRow = ibsStdOlgDtl.GetDataFirstRow(),
    lastRow = ibsStdOlgDtl.GetDataLastRow(),
    nOrlMerIdx = ibsStdOlgDtl.SaveNameCol("olgMer"),
    nIbCheckIdx = ibsStdOlgDtl.SaveNameCol("ibCheck");


 var arrOlgMer = ibsStdOlgDtl.GetRangeText(firstRow, nOrlMerIdx,
    lastRow, nOrlMerIdx).split("^"),
    arrTemp = [];

 for(var i=0; i<arrOlgMer.length; i+=1){
    if(minVal <= arrOlgMer[i] && arrOlgMer[i] <= maxVal) {
       arrTemp[i] = checkedVal;
    }
 }

 // 체크박스 일괄적으로 처리
 ibsStdOlgDtl.SetRangeText(arrTemp.join("^"), firstRow, nIbCheckIdx, lastRow, nIbCheckIdx);