Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Slow script error occurring only when ListGrid columns are grouped

    Hello,

    We are seeing a persistent "slow script" warning with Firefox 3.6 against SmartClient 6.5.1. And, we've even isolated the code via isc.Timer.setTimeout() so this refreshRow() code is executing by itself. But, it is still causing a slow script error. If we ungroup the columns in the ListGrid, the slow script error does not happen. But, when they are grouped, it happens consistently.

    Here is what the firebug "slow script" stack looks like below. Any ideas on a way to resolve this? If you are interested in seeing the problem in action, I can provide you a login to our environment. Just email me off list.


    Code:
     ....loading....
    $ed()
    add()
    getParents()
    isFolder()
    $52u()
    getCellValue()
    (?)()
    $22k()
    refreshCellValue()
    refreshCellValue()
    refreshCell()
    refreshRow()
    error()
    fireCallback()
    $in()
    ISC_Core...5.1.js()

    #2
    If you enable the "redraws" log are you seeing that the refreshRow ultimately leads to a full redraw()? If so, what reason is reported?

    Comment


      #3
      I changed the redraws log category to "DEBUG" and then executed the sequence that causes this to happen. I think the first two redraws are just the result of me clicking on a drop-down option and the third is the redraw causing the problem. Is there something else I need to do in order to provide more information?

      Code:
      16:06:49.054:INFO:redraws:isc_PickListMenu_3662_body:Scheduling redraw (setColumnWidths)
      16:06:49.071:INFO:redraws:isc_PickListMenu_3662_body:Immediate redraw of dirty widget (pickList sizing)
      16:06:49.256:RDQ0:DEBUG:redraws:clearRedrawQueue: 0 redraws (1 items), 0ms

      Comment


        #4
        Actually those logs indicate no redraws other than the PickList (which is expected).

        However the stack does suggest that getCellValue is causing the tree to be rebuilt. If you have getCellValue() overridden or any formatters installed, is there something you're doing, perhaps a setEditValue() or similar, that might explain the need to rebuild the group tree?

        Comment


          #5
          Hi there, I was sending incorrect output before, here is the statement showing the grid redraw. This is getting called because of a call in my code to grid.markForRedraw():

          11:44:02.239:TMR5:INFO:redraws:fundAssetsGrid:Scheduling redraw (8 children) (no reason provided) [Stack trace logged via Firebug: FBugTrace4]


          I am seeing this problem in a grouped grid with 1 row showing and only 2 visible columns. I think the issue is probably related to the fact this grid has about 180 columns although all but 2 are hidden for this test.

          Here is another stacktrace below that is a bit different than the first one I sent. Any suggestions on how to figure this out? We've got a very important end user who wants this resolved. And, it happens in both IE and Firefox.

          Code:
           ....loading....
          getParents()
          getParents()
          isFolder()
          $52u()
          getCellValue()
          makeBodyMethods
          $22k()
          getTableHTML()
          shouldUs...dRatio()
          invokeSuper()
          $ct()
          $282()
          $px()
          modifyContent()
          invokeSuper()
          drawVisibleChunks()
          $ra()
          redrawIfDirty()
          invokeSuper()
          modifyContent()
          invokeSuper()
          redraw()
          finalEval()
          redrawPr...nPeers()
          $ra()
          redrawIfDirty()
          invokeSuper()
          redraw()
          clearRedrawQueue()
          fireCallback()
          $in()
          ISC_Core...5.1.js()

          Comment


            #6
            Hi Dave,

            Can you enable the "redrawTrace" log category - this will log a stack trace when a redraw occurs with no "reason" specified. This should make it clear how you're ending up with a redraw.

            Also, capturing stack traces in IE is much better (Firebug has trouble even getting the names right, much less providing all the additional SC-specific information we include in IE traces).

            Comment


              #7
              Hi, I know exactly why the grid redraw is happening. My code is calling grid.markForRedraw(). The problem is that the grid has 1 row and 2 columns and still gets stuck in multiple slow script errors when nothing else is happening on the screen other than this call to grid.markForRedraw(). I think there is some problem related to this grid having 180 columns in it although only 2 are visible at the moment. We have no such issues when grouping is turned off. But, with grouping on, the slow script errors are persistent.

              The reason I was sticking with Firebug is because I haven't found a way to debug a "slow script" error in IE whereas Firebug gives you that "Debug Script" button. And, I find that the IE Developer toolbar brings IE to a crawl when I try to use it.

              However, I did enable both Redraw and Redraw Trace in IE and here is the stack below from the developer console. Thoughts on what to do next?

              Code:
              14:15:30.406:TMR4:INFO:redraws:fundAssetsGrid:Scheduling redraw (8 children) (no reason provided)
                  Canvas.$q9(_1=>undef, _2=>undef)
                  Canvas.markForRedraw(_1=>undef)
                  refreshDataFAGrid(grid=>[ATListGrid ID:fundAssetsGrid], fundAssetList=>Array[1])
                  removeLSTableRecord(record=>Obj, type=>"FundAsset")
                  loadLSTable(dsName=>"FundAsset", record=>Obj, rowNum=>null, frequency=>"60", singleUpdate=>null, parentRecordObj=>null, forceNewTable=>true, lsUpdate=>false, callBackFn=>undef, skipUIRefresh=>undef)
                  loadLSTablesActiveBody(fundID=>0, fundAssetID=>0)
                  callback(undefined=>undef)
                      "loadLSTablesActiveBody(0,0)"
                  Class.fireCallback(_1=>"loadLSTablesActiveBody(0,0)", _2=>undef, _3=>Array[0], _4=>Obj{length:7}, _5=>true) on [Class Timer]
                  Timer.$in(_1=>"$ir269")
                  anonymous()
                      "isc.Timer.$in('$ir269')"

              Comment


                #8
                Confused now - you started this thread saying that a refreshRow() call was causing a script running slowly dialog so we tried to figure out if that refreshRow was somehow causing a full redraw.

                Now you're saying you're actually calling redraw yourself and that's the source of the script running slowly dialog..

                So which/what is the cause?

                Comment


                  #9
                  Both!

                  If you look back at the thread, I sent one example of a slow script with refreshRow(). Then, I sent another example for a grid redraw(). So, something is happening when the ListGrid is grouped to cause a slow script error both when refreshRow is called and when grid.markForRedraw() is called.

                  Sorry about the confusion.

                  Comment


                    #10
                    OK, that clears that part up.

                    The stack trace you've shown (from Firefox) is inconclusive, but suggests that somehow, you have a formatter function or similar that is causing the grid to repeatedly recalculate grouping every time certain cells are refreshed. Does this ring a bell? Possibly calls to setEditValue() are involved?

                    Capturing and posting profiler output from Firebug may also help.

                    Overall though, the usual approach of trying to isolate this behavior to grid with grouping and 180 columns is the sure way to get it solved (if it's a SmartClient issue).

                    Comment


                      #11
                      There is no special formatting or code triggering setEditValue() apparent to me. This is a grid with 1 row and 2 columns showing.

                      So, here is some more output from Firebug (console and profiler). Does this help at all? If not, I guess you are saying I need to try to recreate in some standalone test case?

                      Console:
                      Code:
                      redraw(Object { name="_1"}, Object { name="_2"}, Object { name="_3"}, Object { name="_4"})ISC_Gr....5.1.js (line 627)
                      invokeSuper(Object { name="_1"}, Object { name="_2"}, Object { name="_3"}, Object { name="_4"}, Object { name="_5"}, Object { name="_6"}, Object { name="_7"}, Object { name="_8"}, Object { name="_9"}, Object { name="_10"})ISC_Co....5.1.js (line 247)
                      modifyContent(Object { name="_1"}, Object { name="_2"}, Object { name="_3"}, Object { name="_4"})ISC_Gr....5.1.js (line 609)
                      invokeSuper(Object { name="_1"}, Object { name="_2"}, Object { name="_3"}, Object { name="_4"}, Object { name="_5"}, Object { name="_6"}, Object { name="_7"}, Object { name="_8"}, Object { name="_9"}, Object { name="_10"})ISC_Co....5.1.js (line 247)
                      redrawIfDirty(Object { name="_1"})ISC_Co....5.1.js (line 1821)
                      redraw(Object { name="_1"}, Object { name="_2"})ISC_Co....5.1.js (line 1820)
                      $e6(Object { name="_1"}, Object { name="_2"}, Object { name="_3"})ISC_Co....5.1.js (line 727)
                      $am(Object { name="_1"})ISC_Co....5.1.js (line 734)
                      Profiler (top few reporting lines):
                      Code:
                      Profile (13057.663ms, 1628824 calls)
                      
                      		
                      Function/Files			Calls	Percent		Own Time	Time		Avg		Min		Max
                      
                      add()				535273	28.85%	3	766.58ms	7424.239ms	0.014ms		0.008ms		2041.908ms	
                      ISC_Co....5.1.js (line 466)
                      
                      getParents()			1	27.57%		3600.116ms	12864.662ms	12864.662ms	12864.662ms	12864.662ms	
                      ISC_Gr....5.1.js (line 93)
                      
                      $ed()				535277	27.13%		3542.057ms	3657.67ms	0.007ms		0.002ms		2041.897ms	
                      ISC_Co....5.1.js (line 480)
                      
                      getParents()			535255	14.1%		1840.517ms	1840.517ms	0.003ms		0.002ms		2.901ms	
                      ISC_Gr....5.1.js (line 92)
                      
                      getEventTargetCanvas()		146	0.11%		13.807ms	23.808ms	0.163ms		0.118ms		0.36ms	
                      ISC_Co....5.1.js (line 1296)
                      
                      String()			1692	0.1%		13.536ms	13.536ms	0.008ms		0.003ms		0.118ms	
                      ISC_Co....5.1.js (line 114)
                      
                      insertAdjacentHTML()		5	0.09%		12.344ms	15.037ms	3.007ms		0.529ms		6.657ms	
                      ISC_Co....5.1.js (line 1556)

                      Comment


                        #12
                        Ok, I've figured out the main problem. And, I'm going to work on making my code more efficient to possibly work around this issue. However, I do think there is possibly something that should be addressed on your side as well.


                        Below is code that you can run as a JSP inside of a 6.5.1 SDK (haven't tested against 7.0). You will see there are 3 buttons you can click at the top.

                        1. " Ungroup, No update, and redraw" ensures that grid is ungrouped, does not update any data, and calls redraw. This always happens very quickly.

                        2. "Ungroup, Update, and redraw" is the same as #1 except it does a mass update of values in the grid to update 100+ hidden fields. This also happens very quickly

                        3. "Group, Update, Redraw" is the same as #2 except it groups the grid prior to updating the data.


                        #3 is a close approximation to the issue we are seeing and #1 and #2 are there to simply highlight the difference of adding grouping. And, you'll notice #3 is much slower and never seems to show the final prompt. I can't make it display a slow script error. But, I think it illustrates the problem well enough. All of these fields are hidden that are getting updated. So, this shouldn't cause

                        Code:
                        <%@ taglib uri="/WEB-INF/iscTaglib.xml" prefix="isomorphic" %>
                        <HEAD><TITLE>
                                SmartClient SDK - Animal Data Binding example
                        </TITLE>
                        
                        <style>
                        
                        input.file {
                        	position: relative;
                        	text-align: right;
                        	-moz-opacity:0 ;
                        	filter:alpha(opacity: 0);
                        	opacity: 0;
                        	z-index: 2;
                        color:#CCCCCC;
                        
                        }
                        
                        .uploadControl{
                        width:500px;
                        color:#CCCCCC;
                        }
                        
                        </style>
                        
                        </HEAD><isomorphic:loadISC skin="SmartClient"/>
                        <BODY BGCOLOR=#D3D3D3>
                        
                        <SCRIPT>
                        <isomorphic:loadDS ID="animals" />
                        
                        
                        var at={};
                        
                        isc.setAutoDraw(false);
                        
                        	isc.Window.addProperties({
                        		showHeaderBackground:false,
                        		//canDragResize:true,
                        		//showFooter:true,
                        		//showResizer:true,
                        		autoDraw: false,
                                autoCenter: true,
                                autoSize: true,
                                dismissOnEscape: true,
                                showCloseButton: true,
                                showMinimizeButton: true
                        	})
                        
                        var demoApp={};
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage",
                            	padding:10,
                                width:650,
                            	contents:"Animal Details"
                        		});
                        
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage2",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage3",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage4",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage5",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage6",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage7",
                            	padding:10,
                            	contents:"Animal Details<br/><a style='display:inline' href='#' onclick='showAssetNotesWindow(null,true,null);' title='add notes'>add notes</a>"
                        		});
                        
                        
                        isc.DynamicForm.create({ID:"assetNotesEditor",
                        overflow: "auto",
                        fields:[{name:"assetID", type:"select",width:150,allowEmptyValue:false,colSpan:3, title:"asset",prompt:"prompt"},{name:"subject", cellStyle:"uploadControl",colSpan:3,width:150, prompt:"subject"},{name:"source", colSpan:3,width:150, prompt:"source"},{name:"attachedFile",title:"attachment",type:"binary",cellStyle:"uploadControl", prompt:"attachment test"},{name:"notes", showTitle:true, colSpan:3,height:375,width:"*", prompt:"notes"}],itemHoverAlign:"left",itemHoverHeight:100,itemHoverWidth:200,height:465,numCols:4,width:700,colWidths:[100,80,80,"*"]});
                        
                        
                        isc.DynamicForm.create({ID: "assetNotesWindowSave",numCols:4,width:"650",height:"25",itemHoverAlign:"left",itemHoverHeight:100,itemHoverWidth:200,colWidths:[100,120,80,"*"]});
                        
                        
                        
                        function showAssetNotesWindow(record,add,assetID){
                        
                        
                        
                        	
                        	if(at.assetNotesWindow==null || !at.assetNotesWindow.isVisible() || !at.assetNotesWindow.isDrawn()){
                        
                        		if(at.assetNotesWindow==null){
                        			var windowTitle = "notes";
                        			at.assetNotesWindow = isc.Window.create({
                        				title: windowTitle,
                        				items: [ assetNotesEditor,assetNotesWindowSave ]
                           	 		});
                              		 
                        		}
                        
                        	}
                        	
                        	
                        	assetNotesEditor.markForRedraw();
                        	at.assetNotesWindow.show();
                        	at.assetNotesWindow.bringToFront();
                        	
                        }
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage8",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.HTMLFlow.create({
                            	ID:"animalMessage9",
                            	padding:10,
                            	contents:"Animal Details"
                        		});
                        
                        isc.DynamicForm.create({
                        	ID: "animalGamesSummary",
                        	itemHoverAlign:"left",
                        	itemHoverHeight:100,
                        	itemHoverWidth:200,
                          	editEvent:"click",
                        	overflow: "auto",
                        	emptyMessage:"empty"
                        });
                        
                        function updateAnimalGamesSummary() {
                        
                        	animalGamesSummaryFields = [
                         		{type:"rowSpacer", height:10},
                        		{name:"animalSummary"}
                         	];
                        	animalGamesSummary.setFields(animalGamesSummaryFields);
                        
                        
                        }
                        
                        isc.DynamicForm.create({
                        	title:"Games Editor",
                        	ID:"animalGamesEditor",
                          	overflow: "auto",
                          	itemHoverAlign:"left",
                        	itemHoverHeight:100,
                        	itemHoverWidth:200,
                            emptyMessage:"empty"
                        });
                        
                        function updateAnimalGamesEditor() {
                        
                        	animalGamesEditorFields = [
                         		{type:"rowSpacer", height:10},
                        		{name:"animalGamesEditor"}
                         	];
                        	animalGamesEditor.setFields(animalGamesEditorFields);
                        
                        
                        }
                        
                        isc.DynamicForm.create({
                        	title:"Data",
                        	ID:"animalDataEditor",
                          	overflow: "auto",
                          	itemHoverAlign:"left",
                        	itemHoverHeight:100,
                        	itemHoverWidth:200,
                            emptyMessage:"empty"
                        });
                        
                        function updateAnimalDataEditor() {
                        
                        	animalDataEditorFields = [
                         		{type:"rowSpacer", height:10},
                        		{name:"attachedFile",type:"binary"},
                        		{name:"animalDataEditor"}
                         	];
                        	animalDataEditor.setFields(animalDataEditorFields);
                        
                        }
                        
                        isc.HLayout.create({
                        	ID:"animalGamesSummaryLayout", 
                        	members:[
                                animalGamesSummary,
                                animalGamesEditor,
                                animalDataEditor
                            ]
                        });
                        
                         isc.DynamicForm.create({
                         	ID: "animalGamesSave",
                        	autoDraw:false,
                        	numCols:5,
                        	width:"100%",
                        	itemHoverAlign:"left",
                        	itemHoverHeight:100,
                        	itemHoverWidth:200,
                        	colWidths:[80,80,80,80,"*"]
                         });
                        
                         function updateAnimalGamesSave(){
                         	animalGamesSaveFields=[
                        
                           	  	{type:"button",  cellPadding:0,  startRow:false,endRow: false,prompt:"edit",title:"Edit", showTitle:false, showLabel:false},
                           	  	{type:"button",  cellPadding:0,  startRow:false,endRow: false,prompt:"edit",title:"Add", showTitle:false, showLabel:false, click:"animalsGrid.startEditingNew();"}
                        
                            ];
                          
                            animalGamesSave.setFields(animalGamesSaveFields);
                         
                         }
                        
                        isc.ListGrid.create({
                        	ID:"animalGamesGrid",
                        	headerHeight:36,
                        	height:125,
                        	canHover:true,
                        	hoverWidth:150,
                        	hoverHeight:50,
                        	hoverAlign:"left",
                        	hoverVAlign:"center",
                        	canSort:false,
                        	stopOnErrors:true,
                        	headerButtonProperties:{
                                hoverWidth:200, hoverHeight:100, hoverAlign:"left", hoverVAlign:"center"
                            },
                        	listEndEditAction:"next",
                        	autoSaveEdits:false,
                        	editEvent:"click",
                        	emptyMessage:"empty",
                        	alternateRecordStyles: true,
                        
                        	fields:[
                                    {name:"includeGames", align:"center", canEdit:true, width:50, prompt:"include"},
                        		{name:"gameName",  canEdit:true, prompt:"Game"}
                        
                        	]
                        })
                        
                        isc.SectionStack.create({
                        	ID:"animalGamesSections", 
                        	className:"borderBR",
                            visibilityMode:"multiple", 
                            backgroundColor:"white",
                        	sections:[
                            	{ expanded:true, items:[animalGamesGrid],showHeader:false},
                            	{ expanded:true, items:[animalGamesSave],showHeader:false},
                        	{ expanded:true, items:[animalGamesSummaryLayout],showHeader:false}
                            ]
                        });
                        
                        isc.SearchForm.create({
                            cellPadding:4,
                            numCols:8,
                        	itemHoverAlign:"left",
                        	itemHoverHeight:100,
                        	itemHoverWidth:200,
                            ID:"findAnimalsForm"
                        })
                        
                        function showQuickAddGrid(){
                        	
                        	if(demoApp.quickAddWindow==null || !demoApp.quickAddWindow.isVisible() || !demoApp.quickAddWindow.isDrawn()){
                         
                        	     demoApp.quickAddWindow = isc.Window.create({
                                    title: "quick add",
                                    items: [ quickAddGrid ]
                                });
                        
                        
                                	quickAddGrid.discardAllEdits();
                           	   	quickAddGrid.startEditingNew();																									
                        		//comment line above and uncomment this and cursor is placed in animal field first time but
                        		// but not on successive tries
                        		//isc.Timer.setTimeout("quickAddGrid.startEditingNew();",0);
                        
                            }
                            
                        	demoApp.quickAddWindow.show();
                           	demoApp.quickAddWindow.bringToFront();
                        
                        }
                        
                        isc.Menu.create({
                        	ID:"animalMenu",
                        	showKeys:true,
                        	data:[
                        		{title:"Add", click:function () {showQuickAddGrid();}}
                            
                            ]
                        });
                        
                        ListGrid.create({
                                    ID:"animalsGrid",
                                    dataSource:"animals",
                        		canEdit:false,
                                    contextMenu:animalMenu,
                        		virtualScrolling:false,
                            		selectionType:"none",
                            		recordClick : function (viewer, record, recordNum, field, fieldNum, value, rawValue) {
                            			nextRecord=record;
                        			showDetails();
                            		}, 
                               	headerHeight: 36
                                })
                        
                        isc.ListGrid.create({
                            ID: "quickAddGrid",
                            headerHeight: 36,
                            height:400,
                        width:400,
                        	listEndEditAction:"next",
                        	canSort:false,
                        	canHover:true,
                        	hoverWidth:150,
                        	hoverHeight:50,
                        	hoverAlign:"left",
                        	hoverVAlign:"center",
                        	stopOnErrors:true,
                        	canEdit:false,
                        	headerButtonProperties:{
                                hoverWidth:200, hoverHeight:100, hoverAlign:"left", hoverVAlign:"center"
                            },
                        	canEdit:true,
                        	autoSize: true,
                        	autoSaveEdits:true,
                        	alternateRecordStyles: true,
                        
                        	editComplete:function(rowNum,colNum,newValues,oldValues,editCompletionEvent,dsResponse){
                        
                        			quickAddGrid.startEditingNew();
                        	},    
                            dataSource:animals
                        });
                        
                        isc.TabSet.create({
                        	ID:"animalTabs",
                        	height:380,
                        	tabs:[
                        		{title:"Games", pane:animalMessage, ID:"animalGamesTab", width:70},
                        		{title:"Notes", pane:animalMessage, ID:"animalNotesTab", width:70},
                        		{title:"Food", pane:animalMessage, ID:"animalFoodTab", width:70},
                        		{title:"Details", pane:animalMessage, ID:"animalDetailsTab", width:70}
                        
                        	]
                        });
                        
                        <%-- right-side layout--%>
                        isc.SectionStack.create({
                        	ID:"rightSections", 
                        	overflow:"auto",
                        	className:"borderBR",
                            visibilityMode:"multiple", backgroundColor:"white",
                        	sections:[
                              {title:"View Options", expanded:true,resizeable:false, items:[{children:[findAnimalsForm],height:30}]},      			
                            	{title:"Grid", canCollapse:false, expanded:true, items:[animalsGrid]},
                            	{title:"Detail", resizeable:false,  expanded:true, items:[animalTabs]} ,
                        	{title:"Welcome", canCollapse:false,expanded:true, items:[animalMessage6]}
                           ]
                        });
                        
                        <%-- fund sections--%>
                        isc.SectionStack.create({ID:"animalProfileSections", className:"borderBR",
                            visibilityMode:"multiple", backgroundColor:"white",
                        	sections:[
                            	{ expanded:true, items:[animalMessage2],showHeader:false},
                            	{ expanded:true, items:[animalMessage3],showHeader:false}
                        	]
                        })
                        
                        <%-- left-side layout--%>
                        isc.SectionStack.create({ID:"leftSections",
                            showResizeBar:true, visibilityMode:"multiple", width:250, className:"borderBL",
                        	sections:[
                            	{title:"Left", canCollapse:false, expanded:true, items:[animalProfileSections]}
                        	]
                        })
                        
                        <%-- **************overall page layout ************************--%>
                        isc.VLayout.create({
                        	ID:"pageLayout", 
                        	width:"100%", 
                        	height:"100%", 
                        	members:[
                            	animalMessage4,
                            	isc.HLayout.create({
                            		ID:"mainLayout", 
                            		layoutMargin:5, 
                            		members:[
                                		leftSections,
                                		rightSections
                            		]
                            	})
                        	]
                        });
                        
                        function showDetails() {
                        
                        	var record = nextRecord;
                        	if(!rightSections.sectionIsExpanded(2) ){
                        	    isc.Timer.setTimeout(
                                  "rightSections.expandSection(2);",
                                0
                            	);
                        	}
                        
                           	animalTabs.updateTab(animalTabs.getTabObject("animalGamesTab"),animalGamesSections);
                        	animalTabs.updateTab(animalTabs.getTabObject("animalNotesTab"),animalMessage7);
                         	animalTabs.updateTab(animalTabs.getTabObject("animalFoodTab"),animalMessage8);
                        	animalTabs.updateTab(animalTabs.getTabObject("animalDetailsTab"),animalMessage9);
                        
                            isc.Timer.setTimeout(
                                "animalsGrid.scrollRecordIntoView(" + animalsGrid.getRecordIndex(record) + ")",
                                0
                            );
                        
                        }
                        
                        
                        //helper method to copy object properties from one object to another--%>
                        function copyObjectProperties(originObj,destObj, dataSourceName){
                        	
                        	if(destObj==null){
                        		destObj={};
                        	}
                        	var originKeys = isc.getKeys(originObj);
                        
                        
                        	var j = originKeys.length;
                        	for (var i = 0; i < j; i++){
                        		var key = originKeys[i];
                        		//append test to cause value to change
                        		destObj[key] = originObj[key] + " test"
                        	}
                        }
                        
                        
                        function updateGridData(){
                        
                        		var record = animalsGrid.getRecord(1);
                        		record.continent1="test data";
                        		record.continent2="test data";
                        		record.continent3="test data";
                        		record.continent4="test data";
                        		record.continent5="test data";
                        		record.continent6="test data";
                        		record.continent7="test data";
                        		record.continent8="test data";
                        		record.continent9="test data";
                        		record.continent10="test data";
                        		record.continent11="test data";
                        		record.continent12="test data";
                        		record.continent13="test data";
                        		record.continent14="test data";
                        		record.continent15="test data";
                        		record.continent16="test data";
                        		record.continent17="test data";
                        		record.continent18="test data";
                        		record.continent19="test data";
                        		record.continent20="test data";
                        		record.continent21="test data";
                        		record.continent22="test data";
                        		record.continent23="test data";
                        		record.continent24="test data";
                        		record.continent25="test data";
                        		record.continent26="test data";
                        		record.continent27="test data";
                        		record.continent28="test data";
                        		record.continent29="test data";
                        		record.continent30="test data";
                        		record.continent31="test data";
                        		record.continent32="test data";
                        		record.continent33="test data";
                        		record.continent34="test data";
                        		record.continent35="test data";
                        		record.continent36="test data";
                        		record.continent37="test data";
                        		record.continent38="test data";
                        		record.continent39="test data";
                        		record.continent40="test data";
                        		record.continent41="test data";
                        		record.continent42="test data";
                        		record.continent43="test data";
                        		record.continent44="test data";
                        		record.continent45="test data";
                        		record.continent46="test data";
                        		record.continent47="test data";
                        		record.continent48="test data";
                        		record.continent49="test data";
                        		record.continent50="test data";
                        		record.continent51="test data";
                        		record.continent52="test data";
                        		record.continent53="test data";
                        		record.continent54="test data";
                        		record.continent55="test data";
                        		record.continent56="test data";
                        		record.continent57="test data";
                        		record.continent58="test data";
                        		record.continent59="test data";
                        		record.continent60="test data";
                        		record.continent61="test data";
                        		record.continent62="test data";
                        		record.continent63="test data";
                        		record.continent64="test data";
                        		record.continent65="test data";
                        		record.continent66="test data";
                        		record.continent67="test data";
                        		record.continent68="test data";
                        		record.continent69="test data";
                        		record.continent70="test data";
                        		record.continent71="test data";
                        		record.continent72="test data";
                        		record.continent73="test data";
                        		record.continent74="test data";
                        		record.continent75="test data";
                        		record.continent76="test data";
                        		record.continent77="test data";
                        		record.continent78="test data";
                        		record.continent79="test data";
                        		record.continent80="test data";
                        		record.continent81="test data";
                        		record.continent82="test data";
                        		record.continent83="test data";
                        		record.continent84="test data";
                        		record.continent85="test data";
                        		record.continent86="test data";
                        		record.continent87="test data";
                        		record.continent88="test data";
                        		record.continent89="test data";
                        		record.continent90="test data";
                        		record.continent91="test data";
                        		record.continent92="test data";
                        		record.continent93="test data";
                        		record.continent94="test data";
                        		record.continent95="test data";
                        		record.continent96="test data";
                        		record.continent97="test data";
                        		record.continent98="test data";
                        		record.continent99="test data";
                        		record.continent90="test data";
                        		record.continent91="test data";
                        		record.continent92="test data";
                        		record.continent93="test data";
                        		record.continent94="test data";
                        		record.continent95="test data";
                        		record.continent96="test data";
                        		record.continent97="test data";
                        		record.continent98="test data";
                        		record.continent99="test data";
                        		record.continent100="test data";
                        		record.continent101="test data";
                        		record.continent102="test data";
                        		record.continent103="test data";
                        		record.continent104="test data";
                        		record.continent105="test data";
                        		record.continent106="test data";
                        		record.continent107="test data";
                        		record.continent108="test data";
                        		record.continent109="test data";
                        		record.continent110="test data";
                        		record.continent111="test data";
                        		record.continent112="test data";
                        		record.continent113="test data";
                        		record.continent114="test data";
                        		record.continent115="test data";
                        		record.continent116="test data";
                        		record.continent117="test data";
                        		record.continent118="test data";
                        		record.continent119="test data";
                        		record.continent120="test data";
                        		record.continent121="test data";
                        		record.continent122="test data";
                        		record.continent123="test data";
                        		record.continent124="test data";
                        		record.continent125="test data";
                        		record.continent126="test data";
                        		record.continent127="test data";
                        		record.continent128="test data";
                        		record.continent129="test data";
                        		record.continent130="test data";
                        		record.continent131="test data";
                        		record.continent132="test data";
                        		record.continent133="test data";
                        		record.continent134="test data";
                        		record.continent135="test data";
                        		record.continent136="test data";
                        		record.continent137="test data";
                        		record.continent138="test data";
                        		record.continent139="test data";
                        		record.continent140="test data";
                        		record.continent141="test data";
                        		record.continent142="test data";
                        		record.continent143="test data";
                        		record.continent144="test data";
                        		record.continent145="test data";
                        		record.continent146="test data";
                        		record.continent147="test data";
                        		record.continent148="test data";
                        		record.continent149="test data";
                        		record.continent150="test data";
                        		record.continent151="test data";
                        		record.continent152="test data";
                        		record.continent153="test data";
                        		record.continent154="test data";
                        		record.continent155="test data";
                        		record.continent156="test data";
                        		record.continent157="test data";
                        		record.continent158="test data";
                        		record.continent159="test data";
                        
                        
                        		var record2 = isc.clone(record);
                        
                        		copyObjectProperties(record2,record);
                        }
                        
                        function updateFindAnimalsForm(){
                            	findAnimalsForm.setFields(
                        		[
                            	{type:"staticText", shouldSaveValue:false},
                              {name:"search"},
                        	{type: "button", width:200, title:"Ungroup, No Update,  Redraw",click:function(){
                        
                        		isc.say("redrawing...");
                        		if(animalsGrid.isGrouped){
                        			animalsGrid.ungroup();
                        		}
                        		//do not call updateGridData here
                        		//updateGridData();
                        		animalsGrid.redraw();
                        		isc.say('redraw complete');
                        		}
                        	},
                        	{type: "button", width:200, title:"Ungroup, Update, and Redraw",click:function(){
                        
                        		isc.say("updating data and redrawing...");
                        		if(animalsGrid.isGrouped){
                        			animalsGrid.ungroup();
                        		}
                        		//call updateGridData here which causes
                        		updateGridData();
                        		animalsGrid.redraw();
                        		isc.say('updating data and redraw complete');
                        		}
                        	},
                        	{type: "button", width:200, title:"Group, Update, Redraw",click:function(){
                        
                        		isc.say("grouping, updating data, and redrawing...");
                        		if(!animalsGrid.isGrouped){
                        			animalsGrid.groupBy("information");
                        		}
                        		//call updateGridData here which causes
                        		updateGridData();
                        		animalsGrid.redraw();
                        		isc.say('group, updating data, and redraw complete');
                        		}
                        	}
                        		]
                        		);
                        
                        
                        }
                        
                        function updateAnimalsGrid(){
                            animalsGrid.setFields([
                        		{name:"commonName"},
                                    {name:"information"},
                                    {name:"information2", showIf:"return false;"},
                                {name:"continent1", showIf:"return false;"},
                                {name:"continent2", showIf:"return false;"},
                                {name:"continent3", showIf:"return false;"},
                                {name:"continent4", showIf:"return false;"},
                                {name:"continent5", showIf:"return false;"},
                                {name:"continent6", showIf:"return false;"},
                                {name:"continent7", showIf:"return false;"},
                                {name:"continent8", showIf:"return false;"},
                                {name:"continent9", showIf:"return false;"},
                                {name:"continent10", showIf:"return false;"},
                                {name:"continent11", showIf:"return false;"},
                                {name:"continent12", showIf:"return false;"},
                                {name:"continent13", showIf:"return false;"},
                                {name:"continent14", showIf:"return false;"},
                                {name:"continent15", showIf:"return false;"},
                                {name:"continent16", showIf:"return false;"},
                                {name:"continent17", showIf:"return false;"},
                                {name:"continent18", showIf:"return false;"},
                                {name:"continent19", showIf:"return false;"},
                                {name:"continent20", showIf:"return false;"},
                                {name:"continent21", showIf:"return false;"},
                                {name:"continent22", showIf:"return false;"},
                                {name:"continent23", showIf:"return false;"},
                                {name:"continent24", showIf:"return false;"},
                                {name:"continent25", showIf:"return false;"},
                                {name:"continent26", showIf:"return false;"},
                                {name:"continent27", showIf:"return false;"},
                                {name:"continent28", showIf:"return false;"},
                                {name:"continent29", showIf:"return false;"},
                                {name:"continent30", showIf:"return false;"},
                                {name:"continent31", showIf:"return false;"},
                                {name:"continent32", showIf:"return false;"},
                                {name:"continent33", showIf:"return false;"},
                                {name:"continent34", showIf:"return false;"},
                                {name:"continent35", showIf:"return false;"},
                                {name:"continent36", showIf:"return false;"},
                                {name:"continent37", showIf:"return false;"},
                                {name:"continent38", showIf:"return false;"},
                                {name:"continent39", showIf:"return false;"},
                                {name:"continent40", showIf:"return false;"},
                                {name:"continent41", showIf:"return false;"},
                                {name:"continent42", showIf:"return false;"},
                                {name:"continent43", showIf:"return false;"},
                                {name:"continent44", showIf:"return false;"},
                                {name:"continent45", showIf:"return false;"},
                                {name:"continent46", showIf:"return false;"},
                                {name:"continent47", showIf:"return false;"},
                                {name:"continent48", showIf:"return false;"},
                                {name:"continent49", showIf:"return false;"},
                                {name:"continent50", showIf:"return false;"},
                                {name:"continent51", showIf:"return false;"},
                                {name:"continent52", showIf:"return false;"},
                                {name:"continent53", showIf:"return false;"},
                                {name:"continen534", showIf:"return false;"},
                                {name:"continent55", showIf:"return false;"},
                                {name:"continent56", showIf:"return false;"},
                                {name:"continent57", showIf:"return false;"},
                                {name:"continent58", showIf:"return false;"},
                                {name:"continent59", showIf:"return false;"},
                                {name:"continent60", showIf:"return false;"},
                                {name:"continent61", showIf:"return false;"},
                                {name:"continent62", showIf:"return false;"},
                                {name:"continent63", showIf:"return false;"},
                                {name:"continent64", showIf:"return false;"},
                                {name:"continent65", showIf:"return false;"},
                                {name:"continent66", showIf:"return false;"},
                                {name:"continent67", showIf:"return false;"},
                                {name:"continent68", showIf:"return false;"},
                                {name:"continent69", showIf:"return false;"},
                                {name:"continent70", showIf:"return false;"},
                                {name:"continent71", showIf:"return false;"},
                                {name:"continent72", showIf:"return false;"},
                                {name:"continent73", showIf:"return false;"},
                                {name:"continent74", showIf:"return false;"},
                                {name:"continent75", showIf:"return false;"},
                                {name:"continent76", showIf:"return false;"},
                                {name:"continent77", showIf:"return false;"},
                                {name:"continent78", showIf:"return false;"},
                                {name:"continent79", showIf:"return false;"},
                                {name:"continent80", showIf:"return false;"},
                                {name:"continent81", showIf:"return false;"},
                                {name:"continent82", showIf:"return false;"},
                                {name:"continent83", showIf:"return false;"},
                                {name:"continent84", showIf:"return false;"},
                                {name:"continent85", showIf:"return false;"},
                                {name:"continent86", showIf:"return false;"},
                                {name:"continent87", showIf:"return false;"},
                                {name:"continent88", showIf:"return false;"},
                                {name:"continent89", showIf:"return false;"},
                                {name:"continent90", showIf:"return false;"},
                                {name:"continent91", showIf:"return false;"},
                                {name:"continent92", showIf:"return false;"},
                                {name:"continent93", showIf:"return false;"},
                                {name:"continent94", showIf:"return false;"},
                                {name:"continent95", showIf:"return false;"},
                                {name:"continent96", showIf:"return false;"},
                                {name:"continent97", showIf:"return false;"},
                                {name:"continent98", showIf:"return false;"},
                                {name:"continent99", showIf:"return false;"},
                                {name:"continent100", showIf:"return false;"},
                                {name:"continent101", showIf:"return false;"},
                                {name:"continent102", showIf:"return false;"},
                                {name:"continent103", showIf:"return false;"},
                                {name:"continent104", showIf:"return false;"},
                                {name:"continent105", showIf:"return false;"},
                                {name:"continent106", showIf:"return false;"},
                                {name:"continent107", showIf:"return false;"},
                                {name:"continent108", showIf:"return false;"},
                                {name:"continent109", showIf:"return false;"},
                                {name:"continent110", showIf:"return false;"},
                                {name:"continent111", showIf:"return false;"},
                                {name:"continent112", showIf:"return false;"},
                                {name:"continent113", showIf:"return false;"},
                                {name:"continent114", showIf:"return false;"},
                                {name:"continent115", showIf:"return false;"},
                                {name:"continent116", showIf:"return false;"},
                                {name:"continent117", showIf:"return false;"},
                                {name:"continent118", showIf:"return false;"},
                                {name:"continent119", showIf:"return false;"},
                                {name:"continent120", showIf:"return false;"},
                                {name:"continent121", showIf:"return false;"},
                                {name:"continent122", showIf:"return false;"},
                                {name:"continent123", showIf:"return false;"},
                                {name:"continent124", showIf:"return false;"},
                                {name:"continent125", showIf:"return false;"},
                                {name:"continent126", showIf:"return false;"},
                                {name:"continent127", showIf:"return false;"},
                                {name:"continent128", showIf:"return false;"},
                                {name:"continent129", showIf:"return false;"},
                                {name:"continent130", showIf:"return false;"},
                                {name:"continent131", showIf:"return false;"},
                                {name:"continent132", showIf:"return false;"},
                                {name:"continent133", showIf:"return false;"},
                                {name:"continent134", showIf:"return false;"},
                                {name:"continent135", showIf:"return false;"},
                                {name:"continent136", showIf:"return false;"},
                                {name:"continent137", showIf:"return false;"},
                                {name:"continent138", showIf:"return false;"},
                                {name:"continent139", showIf:"return false;"},
                                {name:"continent140", showIf:"return false;"},
                                {name:"continent141", showIf:"return false;"},
                                {name:"continent142", showIf:"return false;"},
                                {name:"continent143", showIf:"return false;"},
                                {name:"continent144", showIf:"return false;"},
                                {name:"continent145", showIf:"return false;"},
                                {name:"continent146", showIf:"return false;"},
                                {name:"continent147", showIf:"return false;"},
                                {name:"continent148", showIf:"return false;"},
                                {name:"continent149", showIf:"return false;"},
                                {name:"continent150", showIf:"return false;"},
                                {name:"continent151", showIf:"return false;"},
                                {name:"continent152", showIf:"return false;"},
                                {name:"continent153", showIf:"return false;"},
                                {name:"continent154", showIf:"return false;"},
                                {name:"continent155", showIf:"return false;"},
                                {name:"continent156", showIf:"return false;"},
                                {name:"continent157", showIf:"return false;"},
                                {name:"continent158", showIf:"return false;"},
                                {name:"continent159", showIf:"return false;"}
                        
                        	]
                           )
                        
                        }
                        
                        function updateQuickAddGrid(){
                            quickAddGrid.setFields([
                        		{name:"commonName",required:true},
                                    {name:"information"}
                        	]
                           )
                        
                        }
                        
                        function initPageLayout(){
                        
                            updateAnimalGamesSave()
                            updateAnimalGamesSummary();
                            updateAnimalGamesEditor();
                            updateAnimalDataEditor();
                            updateFindAnimalsForm()
                            updateAnimalsGrid();
                            updateQuickAddGrid(); 
                          
                           pageLayout.draw();
                        
                           //rightSections.showSection(0); 
                           rightSections.showSection(1);
                           rightSections.showSection(2);
                           rightSections.hideSection(3);
                           
                           rightSections.collapseSection(2);
                        
                           //isc.Timer.setTimeout("animalsGrid.groupBy('information');",4000);
                        
                        }
                        
                        animalsGrid.fetchData(null,"initPageLayout();");
                        
                        </SCRIPT>
                        </BODY></HTML>

                        Comment


                          #13
                          On second glance, I don't think the example I sent is a very good illustration of the problem we are having. It seems like the slowness in my example are related to slowness with isc.clone() and we are not actually using that method in our code. So, like I said, I'm going to try to work around this issue on my side. I do think there is something inefficient happening on your side with grouping. But, I wouldn't use my example below as a really worthwhile starting point. Hopefully, I can fix the problems on my end to avoid this issue.

                          Comment

                          Working...
                          X