한 화면에 다수의 시트 생성시 성능 향상 방법

2021. 11. 9. 01:32IBSheet7/성능개선

한개의 IBSheet가 화면에 생성될때 보통 0.15~0.2 초 정도의 시간이 소요됩니다. 그런데 객체의 생성이 순차적으로(동기형태)로 이루어지다보니 화면에 10개의 시트를 만든다고 하면 화면 오픈 과정에서 1.5~2초 정도의 시간이 소요될 수 있습니다.

 

이러한 과정을 순차적이지 않게, 비동기적으로 생성하는 방법이 있습니다.

바로 IBQueue를 이용하여 생성 로직을 모두 큐에 넣고, 한번에 생성하는 방법입니다.

 

코드는 아래와 같습니다.

 

var initSheet1 = {};

initSheet1.Cfg =  { SearchMode:2, MergeSheet:0, Page:20, FrozenCol:1, DataRowMerge:1 };

 

initSheet1.Cols = [

{Header:"NO","Type":"Seq","Hidden":0,"Width":30,"Align":"Center","ColMerge":1,"SaveName":"sSeq"},

{Header:"상태","Type":"Status","Hidden":1,"SaveName":"sStatus"},

{Header:"사원번호","Type":"Text","Hidden":1,"Width":80,"Align":"Left","SaveName":"사원번호S2","ColMerge":1,"EditLen":8},

{Header:"이수구분","Type":"Combo","Hidden":0,"Width":100,"Align":"Left","SaveName":"이수구분","ColMerge":1},

           ......

];

//시트 생성 함수를 Queue에 담는다.

IBQueue.AddItem({

    context : window,

    method : IBS_InitSheet, // Queue에 담아 실행할 함수

    params : [mSheet1,initSheet1], // Queue에 담겨 실행될 함수에 들어갈 parameter

    callback : function(obj) {

mySheet.SetEditable(0);  //해당 함수 실행 후 callback 이 있으면 설정

    }

});

 

var initSheet2 = {};

initSheet2.Cfg = { SearchMode:2, MergeSheet:0, Page:20, FrozenCol:1, DataRowMerge:1 };

initSheet2.Cols = [

{Header:"NO","Type":"Seq","Hidden":0,"Width":30,"Align":"Center","ColMerge":1,"SaveName":"sSeq"},

{Header:"상태","Type":"Status","Hidden":1,"SaveName":"sStatus"},

{Header:"사원번호","Type":"Text","Hidden":1,"Width":80,"Align":"Left","SaveName":"사원번호S3","ColMerge":1,"EditLen":8},

{Header:"일련번호","Type":"Text","Hidden":1,"Width":60,"Align":"Left","SaveName":"일련번호","ColMerge":1,"EditLen":100},

{Header:"가족관계","Type":"Combo","Hidden":0,"Width":70,"Align":"Left","SaveName":"가족관계","ColMerge":1},

  .......

];

//시트 생성 함수를 Queue에 담는다.

IBQueue.AddItem({

        context : window,

        method : IBS_InitSheet,

        params : [mSheet2,initSheet2],

        callback : function(obj) {

        }

});

   

   

//Queue에 담았던 시트를 실행한다. (모두 비동기 형태로 한꺼번에 실행된다.)

IBQueue.Start(function() {

    //Queue의 모든 함수가 실행된 이후에 수행하고자 하는 callback

   doSearch('mSheet1');

});