Announcement

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

    ListGrid scalability issue in IE with > 10,000 rows

    Configuration: SmartGWT version 2.2 (also tried 2.3 nightly), GWT 1.5.3

    My application uses the ListGrid in virtual pagination mode. I have a servlet that is hooked up via the RestDataSource to provide XML using the <startRow>, <endRow> and <totalRows> elements. My data source can provide over 1M rows, 75 at a time.

    The brick wall that I've run into involves the ListGrid running under IE (either in the GWT 1.5.3 hosted mode or in IE in production mode). Once I scroll past 10,000 rows, IE basically hangs - sometimes with the dreaded "script running slowly" message and sometimes the list grid just appears to show no rows (even though scroll bar stays in the position I dragged it to).

    I did install a ListGrid.addDataArrivedHandler and I see the 75 rows are being returned pretty quickly after the scrollbar "button" dragging stops. So I know it isn't a problem with the server side taking too long to serve the data.

    The amount of "virtual" data shouldn't matter as long as the ListGrid is only attempting to work with the max of 75 rows at a time with the much larger total amount - but I'm wondering if it is doing something internally that really slows down after 10,000 rows.

    Firefox and Chrome browsers do not exhibit this problem - could be due to their faster javascript engines.

    Any suggestions or hints of where to look?

    thanks,
    Tom

    #2
    I was able to duplicate the problem with a trivial sample program.

    The 'client' code is:
    Code:
    package com.rg.listgridtest.client;
    
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.core.client.GWT;
    import com.smartgwt.client.data.DataSourceField;
    import com.smartgwt.client.data.RestDataSource;
    import com.smartgwt.client.data.fields.DataSourceIntegerField;
    import com.smartgwt.client.util.SC;
    import com.smartgwt.client.widgets.grid.ListGrid;
    import com.smartgwt.client.widgets.grid.ListGridField;
    import com.smartgwt.client.widgets.grid.events.DataArrivedEvent;
    import com.smartgwt.client.widgets.grid.events.DataArrivedHandler;
    
    public class ListGridTest implements EntryPoint
    {
    	public void onModuleLoad() 
    	{
    	    ListGrid grid = new ListGrid();
    	    
    	    RestDataSource ds = new RestDataSource();
    	    DataSourceField num = new DataSourceIntegerField("num");
    	    ds.setFields(num);
    	    ds.setDataURL("GetData");
    
    	    grid.setHeight100();
    	    grid.setWidth100();
    	    grid.setAutoFetchData(true);
    	    grid.setShowAllRecords(false);
    	    grid.setDataSource(ds);
    	    
    	    ListGridField numField = new ListGridField("num");
                ListGridField contentField = new ListGridField("content");
                ListGridField infoField = new ListGridField("info");
    	    grid.setFields(numField, contentField, infoField);
    	    
    	    grid.addDataArrivedHandler(new DataArrivedHandler() {
    
                    public void onDataArrived(DataArrivedEvent event)
                    {
                        GWT.log("Data arrived:  startRow=" + event.getStartRow() + ", endRow=" + event.getEndRow(), null);
                    }
    	        
    	    });
    
                SC.showConsole();
    	    grid.draw();
    	}
    }
    The 'server' code is:
    Code:
    package com.rg.listgridtest.server;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class GetData extends HttpServlet
    {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
        {
            resp.setContentType("application/xml");
            resp.setCharacterEncoding("UTF-8");
            PrintWriter writer = resp.getWriter();
    
            int startRow = getInteger(req, "_startRow", 0);
            int endRow = getInteger(req, "_endRow", 0);
            System.out.println(new Date() + " - " + Thread.currentThread().getName() + " GetData called with startRow=" + startRow + ", endRow=" + endRow);
            
            writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            
            writer.println("<response>");
            
            int rowsWritten = 0;
        
            writer.println("\t<status>0</status>");
            writer.print("<startRow>");
            writer.print(startRow);
            writer.println("</startRow>");
            writer.print("\t<endRow>");
            writer.print(endRow);
            writer.println("</endRow>");
            writer.print("\t<totalRows>");
            writer.print(1500000);
            writer.println("</totalRows>");
            writer.print("<data>");
    
            for (int i = startRow; i <= endRow; i++)
            {
                writer.print("\t<record>");
                writer.print("<num>");
                writer.print(i);
                writer.print("</num>");
                writer.print("<content>Some content goes here</content>");
                writer.print("<info>Some info goes here</info>");
                writer.println("</record>");
                
                rowsWritten++;
            }
            
            writer.println("</data>");
    
            writer.println("</response>");
            writer.flush();
            writer.close();
            System.out.println(new Date() + " - " + Thread.currentThread().getName() + " done after writing " + rowsWritten + " rows");
        }
    
        private int getInteger(HttpServletRequest req, String parmName, int defValue)
        {
            String value = req.getParameter(parmName);
            if (value == null)
                return defValue;
            
            return Integer.parseInt(value);
        }
    
    }
    and for completeness, the gwt.xml file is:
    Code:
    <module>
    	<inherits name="com.google.gwt.user.User"/>
    	<inherits name="com.smartgwt.SmartGwt"/>
            <inherits name="com.smartclient.tools.SmartClientTools"/>
    	<entry-point class="com.rg.listgridtest.client.ListGridTest"/>
    	<servlet path="/GetData" class="com.rg.listgridtest.server.GetData"/>
    </module>
    With this code, the grid handles the initial display of rows 0 - 75. Then I can scroll down and the grid handles the display of rows 48,467 - 48,542. But when I scroll down farther, I see the fetching of rows 90,709 - 90,784 and ListGrid locks up. The GWT hosted mode dev shell window shows these messages:

    - Starting HTTP on port 8888
    - Data arrived: startRow=0, endRow=75
    - Data arrived: startRow=48467, endRow=48542
    - Data arrived: startRow=90709, endRow=90784

    After the SmartClient console opened, I adjusted the log levels for RPCManager - Info, and ResultSet - Info. I then performed the first scroll (which worked) and the second one much farther down (which didn't work). The Log Messages panel shows this:

    Code:
    23:24:28.458:INFO:Log:initialized
    23:24:28.536:WARN:AutoObserver:Use addInterfaceProperties() to add methods to interface [Class AutoObserver]
    23:24:28.676:INFO:Log:isc.Page is loaded
    Global Log Priorities updated: Logging messages at priority 'Info' and above for category 'RPCManager'.
    Global Log Priorities updated: Logging messages at priority 'Info' and above for category 'ResultSet'.
    23:24:54.404:RDQ1:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):getRange(48495, 48496) will fetch from 48458 to 48532
    23:24:54.404:RDQ1:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):getRange(48495, 48515) will fetch from 48467 to 48542
    23:24:54.606:RDQ6:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):getRange(48492, 48518) will fetch from 48467 to 48542
    23:24:54.918:TMR8:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):fetching rows 48467,48542 from server
    23:24:54.964:TMR8:INFO:RPCManager:sendQueue[1]: 1 RPCRequest(s); transport: xmlHttpRequest; target: GetData
    23:24:54.980:XRP3:INFO:RPCManager:transaction 1 arrived after 16ms
    23:24:54.980:XRP3:INFO:RPCManager:rpcResponse(unstructured) results -->"<?xml version="1.0" encoding="UTF-8"?>
    <response>
    	<status>0</status>
    <startRow>48467</startRow>
    	<endRow>48542</endRow>
    	<totalRows>1500000</totalRows>
    <data>	<record><num>48467</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48468</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48469</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48470</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48471</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48472</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48473</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48474</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48475</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48476</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48477</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48478</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48479</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48480</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48481</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48482</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48483</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48484</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48485</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48486</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48487</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48488</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48489</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48490</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48491</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48492</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48493</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48494</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48495</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48496</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48497</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48498</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48499</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48500</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48501</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48502</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48503</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48504</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48505</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48506</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48507</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48508</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48509</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48510</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48511</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48512</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48513</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48514</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48515</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48516</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48517</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48518</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48519</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48520</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48521</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48522</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48523</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48524</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48525</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48526</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48527</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48528</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48529</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48530</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48531</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48532</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48533</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48534</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48535</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48536</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48537</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48538</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48539</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48540</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48541</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>48542</num><content>Some content goes here</content><info>Some info goes here</info></record>
    </data>
    </response>
    "<--
    23:24:55.042:XRP3:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):Received 76 records from server
    23:24:55.042:XRP3:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):cached 76 rows, from 48467 to 48542 (1500000 total rows, 152 cached)
    23:25:04.044:RDQ8:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):getRange(90737, 90738) will fetch from 90700 to 90774
    23:25:04.044:RDQ8:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):getRange(90737, 90757) will fetch from 90709 to 90784
    23:25:04.246:RDQ5:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):getRange(90734, 90760) will fetch from 90709 to 90784
    23:25:04.558:TMR1:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):fetching rows 90709,90784 from server
    23:25:04.604:TMR1:INFO:RPCManager:sendQueue[2]: 1 RPCRequest(s); transport: xmlHttpRequest; target: GetData
    23:25:04.651:XRP3:INFO:RPCManager:transaction 2 arrived after 47ms
    23:25:04.651:XRP3:INFO:RPCManager:rpcResponse(unstructured) results -->"<?xml version="1.0" encoding="UTF-8"?>
    <response>
    	<status>0</status>
    <startRow>90709</startRow>
    	<endRow>90784</endRow>
    	<totalRows>1500000</totalRows>
    <data>	<record><num>90709</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90710</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90711</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90712</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90713</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90714</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90715</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90716</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90717</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90718</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90719</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90720</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90721</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90722</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90723</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90724</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90725</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90726</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90727</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90728</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90729</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90730</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90731</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90732</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90733</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90734</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90735</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90736</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90737</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90738</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90739</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90740</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90741</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90742</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90743</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90744</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90745</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90746</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90747</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90748</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90749</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90750</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90751</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90752</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90753</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90754</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90755</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90756</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90757</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90758</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90759</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90760</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90761</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90762</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90763</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90764</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90765</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90766</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90767</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90768</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90769</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90770</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90771</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90772</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90773</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90774</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90775</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90776</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90777</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90778</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90779</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90780</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90781</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90782</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90783</num><content>Some content goes here</content><info>Some info goes here</info></record>
    	<record><num>90784</num><content>Some content goes here</content><info>Some info goes here</info></record>
    </data>
    </response>
    "<--
    23:25:04.729:XRP3:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):Received 76 records from server
    23:25:04.745:XRP3:INFO:ResultSet:isc_ResultSet_0 (created by: isc_OID_0):cached 76 rows, from 90709 to 90784 (1500000 total rows, 228 cached)
    So clearly the data is being received and initially processed but the ListGrid or some other component is doing something very strange.

    IE8 shows the problem while Firefox 3.6.8 and Chrome 6.0.472.63 works perfectly.

    Comment


      #3
      This probably only occurs in hosted mode and is most likely a core GWT issue - try upgrading from 1.5.3.

      Comment


        #4
        This problem happens in production deployments as well as hosted mode. Sorry for not mentioning that before.

        Upgrading from GWT 1.5.3 is not an option as we are a few weeks from releasing this version of the product.

        Comment


          #5
          While the most likely explanation remains that it's a GWT issue, this won't be looked at, so it's probably worth your time to establish whether this would occur with the latest GWT.

          Or, just purchase support.

          Comment


            #6
            Ok - fair enough.

            I moved the sample program to GWT 2.0.4 - the behavior is exactly the same. Works perfectly in FireFox and Chrome - but not with IE8.

            It sure seems to be a problem with the ListGrid and IE.

            Comment


              #7
              I noticed another difference in the sample app running in IE vs Firefox or Chrome. In IE when I drag the scroll thumbnail down, it doesn't stay where I drop it - it moves back up a bit (not to the original drag start location though). The farther down I drag the thumbnail, the farther off it moves after the drop. For Firefox and Chrome, the thumbnail stays exactly where I drop it.

              Not sure if that is significant or not.

              Comment


                #8
                Do you have a DOCTYPE declaration? We recommend not having one, and in this case what may be happening is that IE is not respecting the size of some very taller spacer elements we're using to create the scrollable region.

                Also note, as far as "script running slowly" dialogs, for a dataset this large being shown in IE, you may want to use the "progressive loading" approach described under the ResultSet docs. IE's "slow script" detection is completely broken - it can be triggered in under 0.2 seconds on a recent machine, and optimizations that make code faster can actually cause the dialog to be triggered sooner.

                Comment


                  #9
                  In my original 1.5.3 sample app, there is no DOCTYPE declaration in .html file.

                  For the 2.0.4 sample app, I used the Google Eclipse plug-in to generate the sample app and then just plugged in my ListGridTest code. In the case, there was a <!doctype html> entry in the .html file. I commented it out and it did not change the behavior in IE - still fails.

                  Are you able to reproduce the problem with the sample code I gave?

                  Comment


                    #10
                    Any word on this?

                    Also note that in the sample app, the row count threshold when the problem starts is much higher - ~10,000 in my real app but in the sample, it doesn't go completely haywire until scrolling to about 90,000 row.

                    Comment


                      #11
                      We found a new, native browser bug in IE8 where it would not respect the size of very large spacers, and found and checked in a workaround that allows us to extend the scrollable area to enough pixels to accommodate somewhere above 500k rows. It's available in the current nightly build.

                      Because this has happened before with other browsers, we may in the future implement a completely virtualized scrolling system so we're not relying on the browser to respect large content sizes.

                      However for now, above about 500k rows, use the progressive scrolling approach described in ResultSet. It's better for the server, and free-scrolling through that many rows is useless for an end user anyway (consider, each scrollbar pixel in a 500px tall grid represents 1000 rows).

                      Comment


                        #12
                        I tried grabbing the latest nightly from http://www.smartclient.com/smartgwt/builds/

                        but the 'latest' directory has a timestamp from Monday at 8pm - no nightly build Tuesday night with the change?

                        Comment


                          #13
                          Originally posted by tomhj
                          I tried grabbing the latest nightly from http://www.smartclient.com/smartgwt/builds/

                          but the 'latest' directory has a timestamp from Monday at 8pm - no nightly build Tuesday night with the change?
                          Where did you get that URL for the builds? It is no longer current and should not be used. The right place to look for nightly builds is : http://www.smartclient.com/builds/

                          Sanjiv

                          Comment


                            #14
                            I got that link off the GWT project page, specifically:

                            http://code.google.com/p/smartgwt/wiki/NightlyBuilds_and_MavenRepository

                            Comment


                              #15
                              thanks Sanjiv.

                              I downloaded the build from last night. Using the progressive scrolling when the row count is over say 500,000 seems to work but makes it virtually impossible for the user to scroll all the way to the last row (they would have to scroll down past the 'end' 1,000,000/75 or 13,333 times).

                              The completely virtualized paging system sounds like what is really needed.

                              Comment

                              Working...
                              X