Bad client-side crosstab html performance (formatting extremely repetitive/verbose.)
Posted on June 6, 2017 at 10:20am
I have a crosstab with hundreds of rows, hundreds of columns, and hundreds of thousands of cells and the HTML generated (using the HTTP API) is taking up 50MB+ and causing 2GB of memory usage and 20 seconds to render in my browser... A lot of the time is spent by the browser (jquery is a big offender) parsing the html and rendering it. I noticed each cell is upwards of 500 bytes because of formatting which is repeated in every single cell verbatim:
<td class="jrxtdatacell" data-jrxtid="b080ac1e-d105-4462-ad62-7e8f92a4d8b7.0" data-jrxtcolidx="1" style="text-indent: 0px; vertical-align: middle;text-align: right;" role="gridcell">
<span style="font-family: Calibri; color: #000000; font-size: 8px; line-height: 1.1640625;">91,200</span></td>
Turning on HTTP compression helped avoid the network transfer hit, but obvisouly doesn't help our server-side or client-side CPU or memory usage.
Try as we might, we haven't figured out how to get formatting to be in one css style at the top of the page and have simple <td>91,200</td> in the html. The quesiton also remains whether that would even help a report this size using the HTTP api or whether we would need to write (or does one already exist?) a smarter client-side viewer which can render pieces of the report as needed instead of trying to to render the 50MB+ HTML file like the HTTP API does.
We've tried changing the default style, but even changing the default style explodes the HTML... although the styles in jaspersoft understand a type of inheritance it does not seem to be translated to cascading style sheets in the HTML.
p.s. Any other ideas for speeding up client side performance of such a large report?