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?
Announcement
Collapse
No announcement yet.
X
-
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.
Leave a comment:
-
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.
Leave a comment:
-
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.
Leave a comment:
-
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.
Leave a comment:
-
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.
Leave a comment:
-
This probably only occurs in hosted mode and is most likely a core GWT issue - try upgrading from 1.5.3.
Leave a comment:
-
I was able to duplicate the problem with a trivial sample program.
The 'client' code is:
The 'server' 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(); } }
and for completeness, the gwt.xml file 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); } }
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: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>
- 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:
So clearly the data is being received and initially processed but the ListGrid or some other component is doing something very strange.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)
IE8 shows the problem while Firefox 3.6.8 and Chrome 6.0.472.63 works perfectly.
Leave a comment:
-
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,
TomTags: None
Leave a comment: