[richfaces-issues] [JBoss JIRA] Updated: (RF-726) ScrollableDataTable - JavaScript optimisation

Maksim Kaszynski (JIRA) jira-events at lists.jboss.org
Sat Sep 22 13:27:11 EDT 2007


     [ http://jira.jboss.com/jira/browse/RF-726?page=all ]

Maksim Kaszynski updated RF-726:
--------------------------------

        Summary: ScrollableDataTable - JavaScript optimisation   (was: Render Phase is too long with RichFaces table (scrollableDataTable))
    Description: 
Old title was
Render Phase is too long with RichFaces table (scrollableDataTable)

Table of 100 records with 20 columns takes 3.5 sec to render (on server side)

Rendering in browser takes even longer

7.5  (!!!!!!) seconds to render on client side (FireFox 2.0) 


My environment
Release ID: JBoss [EAP] 4.2.0.GA (build: SVNTag=JBPAPP_4_2_0_GA date=200706281411)
Java version: 1.6.0_02,Sun Microsystems Inc.
JBoss Seam 1.2.1
JSF Sun RI 1.2 (comes with JBoss EAP)
Server side state saving


Here is output from FireBug JavaScript profiler (apologies for formatting)

scrollTo, setOpacity, _calcDefaultRowHeight, and getViewportHeight  javascript functions are main culprits on client side (90% of 7.5 seconds)


Function
	
Calls
	
Percent
	
Own Time
	
Time
	
Avg
	
Min
	
Max
	
File
scrollTo	272	52.8%	3984.375ms	3984.375ms	14.648ms	0ms	578.125ms	a4j_3_1_0-SNAPSHO... (line 110)
setOpacity	221	25.88%	1953.125ms	3531.25ms	15.979ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 114)
_calcDefaultRowHeight	1	10.56%	796.875ms	796.875ms	796.875ms	796.875ms	796.875ms	scrollable-data-t... (line 183)
getViewportHeight	8	5.18%	390.625ms	406.25ms	50.781ms	0ms	296.875ms	scrollable-data-t... (line 59)
times	566	2.07%	156.25ms	187.5ms	0.331ms	0ms	187.5ms	a4j_3_1_0-SNAPSHO... (line 25)
$	1893	1.04%	78.125ms	93.75ms	0.05ms	0ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 90)
setListeners	1	0.62%	46.875ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 222)
parseTemplate	1	0.21%	15.625ms	812.5ms	812.5ms	812.5ms	812.5ms	scrollable-data-t... (line 144)
initialize	1	0.21%	15.625ms	2500ms	2500ms	2500ms	2500ms	scrollable-data-t... (line 134)
hasAttribute	1	0.21%	15.625ms	15.625ms	15.625ms	15.625ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 128)
extend	1893	0.21%	15.625ms	15.625ms	0.008ms	0ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 97)
requireClass	76	0.21%	15.625ms	31.25ms	0.411ms	0ms	15.625ms	scrollable-data-t... (line 8)
getElement	56	0.21%	15.625ms	1156.25ms	20.647ms	0ms	578.125ms	scrollable-data-t... (line 45)
getOpacity	206	0.21%	15.625ms	218.75ms	1.062ms	0ms	187.5ms	a4j_3_1_0-SNAPSHO... (line 111)
observe	400	0.21%	15.625ms	15.625ms	0.039ms	0ms	15.625ms	scrollable-data-t... (line 21)
parseTemplate	1	0.21%	15.625ms	390.625ms	390.625ms	390.625ms	390.625ms	scrollable-data-t... (line 99)
getState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 217)
_calcDefaultRowHeight	1	0%	0ms	312.5ms	312.5ms	312.5ms	312.5ms	scrollable-data-t... (line 183)
_getCellElements	69	0%	0ms	15.625ms	0.226ms	0ms	15.625ms	scrollable-data-t... (line 117)
_getCellElements	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 117)
_hideSplitter	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 125)
_hideSplitter	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 125)
_observeAndCache	475	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 217)
_setPendingTask	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 158)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 197)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 197)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 152)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 152)
bindAsEventListener	45	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
bindAsEventListener	3	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
bindAsEventListener	411	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
capitalize	3	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 26)
clean	69	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 32)
clean	69	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 32)
clear	6	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 46)
click	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 14)
click	2	0%	0ms	7468.75ms	3734.375ms	0ms	7468.75ms	scrollable-data-t... (line 14)
click	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 14)
clone	5	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 11)
clone	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 11)
clone	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	a4j_3_1_0-SNAPSHO... (line 11)
clone	21	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 48)
collect	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 32)
collect	5	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 32)
constructor	55	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 27)
constructor	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 28)
copy	6	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 133)
create	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 64)
create	38	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 3)
create	86	0%	0ms	4484.375ms	52.144ms	0ms	2906.25ms	a4j_3_1_0-SNAPSHO... (line 3)
createControl	1	0%	0ms	7062.5ms	7062.5ms	7062.5ms	7062.5ms	scrollable-data-t... (line 200)
each	105	0%	0ms	7500ms	71.429ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 29)
each	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 218)
each	26	0%	0ms	7500ms	288.462ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 29)
ensureVisible	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 211)
execOnLoad	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
execOnLoad	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
execOnLoad	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
execOnLoad	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
extend	64	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 4)
initialize	1	0%	0ms	796.875ms	796.875ms	796.875ms	796.875ms	scrollable-data-t... (line 97)
findDOMClass	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 135)
findOrStore	787	0%	0ms	6171.875ms	7.842ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 101)
findOrStore	79	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 101)
from	1228	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 40)
getBorderWidth	17	0%	0ms	31.25ms	1.838ms	0ms	15.625ms	scrollable-data-t... (line 63)
getBorderWidth	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 63)
getBorderWidth	14	0%	0ms	31.25ms	2.232ms	0ms	15.625ms	scrollable-data-t... (line 63)
getColumns	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 120)
getColumns	16	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 120)
getColumnsFrozenWidth	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 209)
getColumnsTotalWidth	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 208)
getContainer	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 89)
getCount	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 85)
getDomDocument	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
load	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 2)
getElement	427	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 45)
getForm	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 240)
getHeader	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
getHeader	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
getHeader	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
moveTo	13	0%	0ms	15.625ms	1.202ms	0ms	15.625ms	scrollable-data-t... (line 55)
(no name)	5	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 5)
TimedObserver	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 207)
getHeight	124	0%	0ms	1750ms	14.113ms	0ms	578.125ms	a4j_3_1_0-SNAPSHO... (line 106)
getPane	27	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 92)
getHeader	17	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
moveTo	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 55)
Insertion	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 138)
getValue	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 209)
setListeners	400	0%	0ms	15.625ms	0.039ms	0ms	15.625ms	scrollable-data-t... (line 222)
getWidth	53	0%	0ms	1765.625ms	33.314ms	0ms	875ms	scrollable-data-t... (line 49)
getX	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
getX	45	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
getX	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
observe	479	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 70)
include	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 35)
initialize	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 199)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	15.625ms	15.625ms	15.625ms	15.625ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	390.625ms	390.625ms	390.625ms	390.625ms	scrollable-data-t... (line 97)
initialize	9	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 69)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 75)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 83)
registerEvents	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 87)
initialize	2	0%	0ms	7468.75ms	3734.375ms	0ms	7468.75ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 83)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 90)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 95)
initialize	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 238)
registerEvents	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 91)
initialize	1	0%	0ms	2421.875ms	2421.875ms	2421.875ms	2421.875ms	scrollable-data-t... (line 95)
initialize	1	0%	0ms	2906.25ms	2906.25ms	2906.25ms	2906.25ms	scrollable-data-t... (line 134)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 134)
inspectRanges	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 219)
isFunction	100	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 35)
isObject	73	0%	0ms	2406.25ms	32.962ms	0ms	406.25ms	scrollable-data-t... (line 38)
restoreState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 220)
loadRows	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 86)
makeAbsolute	12	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 64)
getState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 217)
toQueryString	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 56)
setHeight	23	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 48)
moveTo	3	0%	0ms	15.625ms	5.208ms	0ms	15.625ms	scrollable-data-t... (line 55)
moveToY	15	0%	0ms	15.625ms	1.042ms	0ms	15.625ms	scrollable-data-t... (line 54)
update	396	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 38)
observe	475	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 218)
(no name)	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 194)
setListeners	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 222)
setListeners	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 222)
parseTemplate	1	0%	0ms	312.5ms	312.5ms	312.5ms	312.5ms	scrollable-data-t... (line 185)
pckg	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 9)
updateHeaders	2	0%	0ms	406.25ms	203.125ms	187.5ms	218.75ms	scrollable-data-t... (line 126)
registerEvents	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 91)
registerEvents	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 87)
updateHeaders	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 126)
setupClass	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 3)
requireClass	21	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 8)
requireClass	20	0%	0ms	31.25ms	1.563ms	0ms	15.625ms	scrollable-data-t... (line 8)
updateLayout	1	0%	0ms	2640.625ms	2640.625ms	2640.625ms	2640.625ms	scrollable-data-t... (line 203)
getHeight	97	0%	0ms	1781.25ms	18.363ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 106)
getScrollOffset	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 207)
updateLayout	2	0%	0ms	406.25ms	203.125ms	187.5ms	218.75ms	scrollable-data-t... (line 119)
OnSepMouseMove	43	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 121)
Level	8	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 94)
_each	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 60)
updateLayout	1	0%	0ms	109.375ms	109.375ms	109.375ms	109.375ms	scrollable-data-t... (line 196)
setWidth	24	0%	0ms	15.625ms	0.651ms	0ms	15.625ms	scrollable-data-t... (line 52)
(no name)	22	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 194)
updateLayout	1	0%	0ms	2078.125ms	2078.125ms	2078.125ms	2078.125ms	scrollable-data-t... (line 148)
moveToX	38	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 53)
R	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 58)
OnSepMouseMove	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 121)
_each	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 60)
_calcDefaultRowHeight	1	0%	0ms	703.125ms	703.125ms	703.125ms	703.125ms	scrollable-data-t... (line 183)
_each	26	0%	0ms	7500ms	288.462ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 45)
unregister	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 61)

Timing of server side rendering from log:

2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process before phase RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] before phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] beginning transaction prior to phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] after phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] committing transaction after phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process after phase RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process before phase RENDER_RESPONSE 6
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] before phase: RENDER_RESPONSE 6
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
2007-08-25 22:16:23,796 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] after phase: RENDER_RESPONSE 6
2007-08-25 22:16:23,796 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] committing transaction after phase: RENDER_RESPONSE 6
2007-08-25 22:16:23,796 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process after phase RENDER_RESPONSE 6
2007-08-25 22:16:24,250 DEBUG [org.ajax4jsf.webapp.BaseXMLFilter] Parsing html total time 454ms
2007-08-25 22:16:24,250 DEBUG [org.ajax4jsf.webapp.BaseFilter] Finished request processing total time 3688ms for uri: /Table/recordListRich.seam


Test page

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
				xmlns:a4j="http://richfaces.org/a4j"
				xmlns:rich="http://richfaces.org/rich"
                template="layout/template.xhtml">
                       
<ui:define name="body">

    <h1>recordList</h1>
    <p>Generated list page</p>
    
    <h:messages globalOnly="true" styleClass="message"/>
    
    <h:outputText value="No record exists" 
            rendered="#{empty recordList.resultList}"/>

    <rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="400px" width="100%" id="recordList" columnClasses="col"
                value="#{recordList.resultList}" var="record" sortMode="single"
                rendered="#{not empty recordList.resultList}">
        <rich:column id="recId">
            <f:facet name="header">Id</f:facet>
            #{record.id}
        </rich:column>
        <rich:column id="recName">
            <f:facet name="header">Name</f:facet>
            <s:link id="record" value="#{record.name}" view="/record.xhtml">
                <f:param name="recordId" value="#{record.id}"/>
            </s:link>
        </rich:column>

        <rich:column id="recF01">
            <f:facet name="header">F01</f:facet>
            <s:link id="record" value="#{record.f01}" view="/record.xhtml">
                <f:param name="recordId" value="#{record.id}"/>
            </s:link>
        </rich:column>
...

    </rich:scrollableDataTable>
    
    <div class="actionButtons">
        <s:button id="done" value="Create record"
            view="/record.xhtml"/>			  
    </div>
    
</ui:define>

</ui:composition>


I hope this can help to fix the performance, cause with current implementation it is waaay to clow

Thanks

  was:
Table of 100 records with 20 columns takes 3.5 sec to render (on server side)

Rendering in browser takes even longer

7.5  (!!!!!!) seconds to render on client side (FireFox 2.0) 


My environment
Release ID: JBoss [EAP] 4.2.0.GA (build: SVNTag=JBPAPP_4_2_0_GA date=200706281411)
Java version: 1.6.0_02,Sun Microsystems Inc.
JBoss Seam 1.2.1
JSF Sun RI 1.2 (comes with JBoss EAP)
Server side state saving


Here is output from FireBug JavaScript profiler (apologies for formatting)

scrollTo, setOpacity, _calcDefaultRowHeight, and getViewportHeight  javascript functions are main culprits on client side (90% of 7.5 seconds)


Function
	
Calls
	
Percent
	
Own Time
	
Time
	
Avg
	
Min
	
Max
	
File
scrollTo	272	52.8%	3984.375ms	3984.375ms	14.648ms	0ms	578.125ms	a4j_3_1_0-SNAPSHO... (line 110)
setOpacity	221	25.88%	1953.125ms	3531.25ms	15.979ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 114)
_calcDefaultRowHeight	1	10.56%	796.875ms	796.875ms	796.875ms	796.875ms	796.875ms	scrollable-data-t... (line 183)
getViewportHeight	8	5.18%	390.625ms	406.25ms	50.781ms	0ms	296.875ms	scrollable-data-t... (line 59)
times	566	2.07%	156.25ms	187.5ms	0.331ms	0ms	187.5ms	a4j_3_1_0-SNAPSHO... (line 25)
$	1893	1.04%	78.125ms	93.75ms	0.05ms	0ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 90)
setListeners	1	0.62%	46.875ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 222)
parseTemplate	1	0.21%	15.625ms	812.5ms	812.5ms	812.5ms	812.5ms	scrollable-data-t... (line 144)
initialize	1	0.21%	15.625ms	2500ms	2500ms	2500ms	2500ms	scrollable-data-t... (line 134)
hasAttribute	1	0.21%	15.625ms	15.625ms	15.625ms	15.625ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 128)
extend	1893	0.21%	15.625ms	15.625ms	0.008ms	0ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 97)
requireClass	76	0.21%	15.625ms	31.25ms	0.411ms	0ms	15.625ms	scrollable-data-t... (line 8)
getElement	56	0.21%	15.625ms	1156.25ms	20.647ms	0ms	578.125ms	scrollable-data-t... (line 45)
getOpacity	206	0.21%	15.625ms	218.75ms	1.062ms	0ms	187.5ms	a4j_3_1_0-SNAPSHO... (line 111)
observe	400	0.21%	15.625ms	15.625ms	0.039ms	0ms	15.625ms	scrollable-data-t... (line 21)
parseTemplate	1	0.21%	15.625ms	390.625ms	390.625ms	390.625ms	390.625ms	scrollable-data-t... (line 99)
getState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 217)
_calcDefaultRowHeight	1	0%	0ms	312.5ms	312.5ms	312.5ms	312.5ms	scrollable-data-t... (line 183)
_getCellElements	69	0%	0ms	15.625ms	0.226ms	0ms	15.625ms	scrollable-data-t... (line 117)
_getCellElements	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 117)
_hideSplitter	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 125)
_hideSplitter	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 125)
_observeAndCache	475	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 217)
_setPendingTask	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 158)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 197)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 197)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 152)
adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 152)
bindAsEventListener	45	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
bindAsEventListener	3	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
bindAsEventListener	411	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
capitalize	3	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 26)
clean	69	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 32)
clean	69	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 32)
clear	6	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 46)
click	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 14)
click	2	0%	0ms	7468.75ms	3734.375ms	0ms	7468.75ms	scrollable-data-t... (line 14)
click	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 14)
clone	5	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 11)
clone	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 11)
clone	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	a4j_3_1_0-SNAPSHO... (line 11)
clone	21	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 48)
collect	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 32)
collect	5	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 32)
constructor	55	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 27)
constructor	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 28)
copy	6	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 133)
create	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 64)
create	38	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 3)
create	86	0%	0ms	4484.375ms	52.144ms	0ms	2906.25ms	a4j_3_1_0-SNAPSHO... (line 3)
createControl	1	0%	0ms	7062.5ms	7062.5ms	7062.5ms	7062.5ms	scrollable-data-t... (line 200)
each	105	0%	0ms	7500ms	71.429ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 29)
each	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 218)
each	26	0%	0ms	7500ms	288.462ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 29)
ensureVisible	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 211)
execOnLoad	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
execOnLoad	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
execOnLoad	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
execOnLoad	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
extend	64	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 4)
initialize	1	0%	0ms	796.875ms	796.875ms	796.875ms	796.875ms	scrollable-data-t... (line 97)
findDOMClass	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 135)
findOrStore	787	0%	0ms	6171.875ms	7.842ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 101)
findOrStore	79	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 101)
from	1228	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 40)
getBorderWidth	17	0%	0ms	31.25ms	1.838ms	0ms	15.625ms	scrollable-data-t... (line 63)
getBorderWidth	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 63)
getBorderWidth	14	0%	0ms	31.25ms	2.232ms	0ms	15.625ms	scrollable-data-t... (line 63)
getColumns	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 120)
getColumns	16	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 120)
getColumnsFrozenWidth	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 209)
getColumnsTotalWidth	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 208)
getContainer	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 89)
getCount	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 85)
getDomDocument	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
load	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 2)
getElement	427	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 45)
getForm	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 240)
getHeader	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
getHeader	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
getHeader	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
moveTo	13	0%	0ms	15.625ms	1.202ms	0ms	15.625ms	scrollable-data-t... (line 55)
(no name)	5	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 5)
TimedObserver	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 207)
getHeight	124	0%	0ms	1750ms	14.113ms	0ms	578.125ms	a4j_3_1_0-SNAPSHO... (line 106)
getPane	27	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 92)
getHeader	17	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
moveTo	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 55)
Insertion	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 138)
getValue	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 209)
setListeners	400	0%	0ms	15.625ms	0.039ms	0ms	15.625ms	scrollable-data-t... (line 222)
getWidth	53	0%	0ms	1765.625ms	33.314ms	0ms	875ms	scrollable-data-t... (line 49)
getX	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
getX	45	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
getX	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
observe	479	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 70)
include	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 35)
initialize	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 199)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	15.625ms	15.625ms	15.625ms	15.625ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	390.625ms	390.625ms	390.625ms	390.625ms	scrollable-data-t... (line 97)
initialize	9	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 69)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 75)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 83)
registerEvents	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 87)
initialize	2	0%	0ms	7468.75ms	3734.375ms	0ms	7468.75ms	scrollable-data-t... (line 238)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 83)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 90)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 95)
initialize	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 238)
registerEvents	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 91)
initialize	1	0%	0ms	2421.875ms	2421.875ms	2421.875ms	2421.875ms	scrollable-data-t... (line 95)
initialize	1	0%	0ms	2906.25ms	2906.25ms	2906.25ms	2906.25ms	scrollable-data-t... (line 134)
initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 134)
inspectRanges	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 219)
isFunction	100	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 35)
isObject	73	0%	0ms	2406.25ms	32.962ms	0ms	406.25ms	scrollable-data-t... (line 38)
restoreState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 220)
loadRows	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 86)
makeAbsolute	12	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 64)
getState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 217)
toQueryString	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 56)
setHeight	23	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 48)
moveTo	3	0%	0ms	15.625ms	5.208ms	0ms	15.625ms	scrollable-data-t... (line 55)
moveToY	15	0%	0ms	15.625ms	1.042ms	0ms	15.625ms	scrollable-data-t... (line 54)
update	396	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 38)
observe	475	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 218)
(no name)	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 194)
setListeners	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 222)
setListeners	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 222)
parseTemplate	1	0%	0ms	312.5ms	312.5ms	312.5ms	312.5ms	scrollable-data-t... (line 185)
pckg	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 9)
updateHeaders	2	0%	0ms	406.25ms	203.125ms	187.5ms	218.75ms	scrollable-data-t... (line 126)
registerEvents	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 91)
registerEvents	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 87)
updateHeaders	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 126)
setupClass	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 3)
requireClass	21	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 8)
requireClass	20	0%	0ms	31.25ms	1.563ms	0ms	15.625ms	scrollable-data-t... (line 8)
updateLayout	1	0%	0ms	2640.625ms	2640.625ms	2640.625ms	2640.625ms	scrollable-data-t... (line 203)
getHeight	97	0%	0ms	1781.25ms	18.363ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 106)
getScrollOffset	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 207)
updateLayout	2	0%	0ms	406.25ms	203.125ms	187.5ms	218.75ms	scrollable-data-t... (line 119)
OnSepMouseMove	43	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 121)
Level	8	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 94)
_each	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 60)
updateLayout	1	0%	0ms	109.375ms	109.375ms	109.375ms	109.375ms	scrollable-data-t... (line 196)
setWidth	24	0%	0ms	15.625ms	0.651ms	0ms	15.625ms	scrollable-data-t... (line 52)
(no name)	22	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 194)
updateLayout	1	0%	0ms	2078.125ms	2078.125ms	2078.125ms	2078.125ms	scrollable-data-t... (line 148)
moveToX	38	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 53)
R	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 58)
OnSepMouseMove	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 121)
_each	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 60)
_calcDefaultRowHeight	1	0%	0ms	703.125ms	703.125ms	703.125ms	703.125ms	scrollable-data-t... (line 183)
_each	26	0%	0ms	7500ms	288.462ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 45)
unregister	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 61)

Timing of server side rendering from log:

2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process before phase RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] before phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] beginning transaction prior to phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] after phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] committing transaction after phase: RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process after phase RESTORE_VIEW 1
2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process before phase RENDER_RESPONSE 6
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] before phase: RENDER_RESPONSE 6
2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
2007-08-25 22:16:23,796 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] after phase: RENDER_RESPONSE 6
2007-08-25 22:16:23,796 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] committing transaction after phase: RENDER_RESPONSE 6
2007-08-25 22:16:23,796 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process after phase RENDER_RESPONSE 6
2007-08-25 22:16:24,250 DEBUG [org.ajax4jsf.webapp.BaseXMLFilter] Parsing html total time 454ms
2007-08-25 22:16:24,250 DEBUG [org.ajax4jsf.webapp.BaseFilter] Finished request processing total time 3688ms for uri: /Table/recordListRich.seam


Test page

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
				xmlns:a4j="http://richfaces.org/a4j"
				xmlns:rich="http://richfaces.org/rich"
                template="layout/template.xhtml">
                       
<ui:define name="body">

    <h1>recordList</h1>
    <p>Generated list page</p>
    
    <h:messages globalOnly="true" styleClass="message"/>
    
    <h:outputText value="No record exists" 
            rendered="#{empty recordList.resultList}"/>

    <rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="400px" width="100%" id="recordList" columnClasses="col"
                value="#{recordList.resultList}" var="record" sortMode="single"
                rendered="#{not empty recordList.resultList}">
        <rich:column id="recId">
            <f:facet name="header">Id</f:facet>
            #{record.id}
        </rich:column>
        <rich:column id="recName">
            <f:facet name="header">Name</f:facet>
            <s:link id="record" value="#{record.name}" view="/record.xhtml">
                <f:param name="recordId" value="#{record.id}"/>
            </s:link>
        </rich:column>

        <rich:column id="recF01">
            <f:facet name="header">F01</f:facet>
            <s:link id="record" value="#{record.f01}" view="/record.xhtml">
                <f:param name="recordId" value="#{record.id}"/>
            </s:link>
        </rich:column>
...

    </rich:scrollableDataTable>
    
    <div class="actionButtons">
        <s:button id="done" value="Create record"
            view="/record.xhtml"/>			  
    </div>
    
</ui:define>

</ui:composition>


I hope this can help to fix the performance, cause with current implementation it is waaay to clow

Thanks

       Priority: Major  (was: Critical)

> ScrollableDataTable - JavaScript optimisation 
> ----------------------------------------------
>
>                 Key: RF-726
>                 URL: http://jira.jboss.com/jira/browse/RF-726
>             Project: RichFaces
>          Issue Type: Bug
>    Affects Versions: 3.1.0
>            Reporter: Mikhail Grushinskiy
>         Assigned To: Konstantin Mishin
>             Fix For: 3.2.0
>
>         Attachments: AnotherRun.jpg, Java Profiler results.jpg, JBossProfile.GIF
>
>
> Old title was
> Render Phase is too long with RichFaces table (scrollableDataTable)
> Table of 100 records with 20 columns takes 3.5 sec to render (on server side)
> Rendering in browser takes even longer
> 7.5  (!!!!!!) seconds to render on client side (FireFox 2.0) 
> My environment
> Release ID: JBoss [EAP] 4.2.0.GA (build: SVNTag=JBPAPP_4_2_0_GA date=200706281411)
> Java version: 1.6.0_02,Sun Microsystems Inc.
> JBoss Seam 1.2.1
> JSF Sun RI 1.2 (comes with JBoss EAP)
> Server side state saving
> Here is output from FireBug JavaScript profiler (apologies for formatting)
> scrollTo, setOpacity, _calcDefaultRowHeight, and getViewportHeight  javascript functions are main culprits on client side (90% of 7.5 seconds)
> Function
> 	
> Calls
> 	
> Percent
> 	
> Own Time
> 	
> Time
> 	
> Avg
> 	
> Min
> 	
> Max
> 	
> File
> scrollTo	272	52.8%	3984.375ms	3984.375ms	14.648ms	0ms	578.125ms	a4j_3_1_0-SNAPSHO... (line 110)
> setOpacity	221	25.88%	1953.125ms	3531.25ms	15.979ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 114)
> _calcDefaultRowHeight	1	10.56%	796.875ms	796.875ms	796.875ms	796.875ms	796.875ms	scrollable-data-t... (line 183)
> getViewportHeight	8	5.18%	390.625ms	406.25ms	50.781ms	0ms	296.875ms	scrollable-data-t... (line 59)
> times	566	2.07%	156.25ms	187.5ms	0.331ms	0ms	187.5ms	a4j_3_1_0-SNAPSHO... (line 25)
> $	1893	1.04%	78.125ms	93.75ms	0.05ms	0ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 90)
> setListeners	1	0.62%	46.875ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 222)
> parseTemplate	1	0.21%	15.625ms	812.5ms	812.5ms	812.5ms	812.5ms	scrollable-data-t... (line 144)
> initialize	1	0.21%	15.625ms	2500ms	2500ms	2500ms	2500ms	scrollable-data-t... (line 134)
> hasAttribute	1	0.21%	15.625ms	15.625ms	15.625ms	15.625ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 128)
> extend	1893	0.21%	15.625ms	15.625ms	0.008ms	0ms	15.625ms	a4j_3_1_0-SNAPSHO... (line 97)
> requireClass	76	0.21%	15.625ms	31.25ms	0.411ms	0ms	15.625ms	scrollable-data-t... (line 8)
> getElement	56	0.21%	15.625ms	1156.25ms	20.647ms	0ms	578.125ms	scrollable-data-t... (line 45)
> getOpacity	206	0.21%	15.625ms	218.75ms	1.062ms	0ms	187.5ms	a4j_3_1_0-SNAPSHO... (line 111)
> observe	400	0.21%	15.625ms	15.625ms	0.039ms	0ms	15.625ms	scrollable-data-t... (line 21)
> parseTemplate	1	0.21%	15.625ms	390.625ms	390.625ms	390.625ms	390.625ms	scrollable-data-t... (line 99)
> getState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 217)
> _calcDefaultRowHeight	1	0%	0ms	312.5ms	312.5ms	312.5ms	312.5ms	scrollable-data-t... (line 183)
> _getCellElements	69	0%	0ms	15.625ms	0.226ms	0ms	15.625ms	scrollable-data-t... (line 117)
> _getCellElements	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 117)
> _hideSplitter	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 125)
> _hideSplitter	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 125)
> _observeAndCache	475	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 217)
> _setPendingTask	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 158)
> adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 197)
> adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 197)
> adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 152)
> adjustScrollPosition	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 152)
> bindAsEventListener	45	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
> bindAsEventListener	3	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
> bindAsEventListener	411	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
> capitalize	3	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 26)
> clean	69	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 32)
> clean	69	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 32)
> clear	6	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 46)
> click	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 14)
> click	2	0%	0ms	7468.75ms	3734.375ms	0ms	7468.75ms	scrollable-data-t... (line 14)
> click	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 14)
> clone	5	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 11)
> clone	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 11)
> clone	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	a4j_3_1_0-SNAPSHO... (line 11)
> clone	21	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 48)
> collect	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 32)
> collect	5	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 32)
> constructor	55	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 27)
> constructor	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 28)
> copy	6	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 133)
> create	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 64)
> create	38	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 3)
> create	86	0%	0ms	4484.375ms	52.144ms	0ms	2906.25ms	a4j_3_1_0-SNAPSHO... (line 3)
> createControl	1	0%	0ms	7062.5ms	7062.5ms	7062.5ms	7062.5ms	scrollable-data-t... (line 200)
> each	105	0%	0ms	7500ms	71.429ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 29)
> each	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 218)
> each	26	0%	0ms	7500ms	288.462ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 29)
> ensureVisible	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 211)
> execOnLoad	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
> execOnLoad	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
> execOnLoad	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
> execOnLoad	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 30)
> extend	64	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 4)
> initialize	1	0%	0ms	796.875ms	796.875ms	796.875ms	796.875ms	scrollable-data-t... (line 97)
> findDOMClass	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 135)
> findOrStore	787	0%	0ms	6171.875ms	7.842ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 101)
> findOrStore	79	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 101)
> from	1228	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 40)
> getBorderWidth	17	0%	0ms	31.25ms	1.838ms	0ms	15.625ms	scrollable-data-t... (line 63)
> getBorderWidth	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 63)
> getBorderWidth	14	0%	0ms	31.25ms	2.232ms	0ms	15.625ms	scrollable-data-t... (line 63)
> getColumns	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 120)
> getColumns	16	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 120)
> getColumnsFrozenWidth	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 209)
> getColumnsTotalWidth	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 208)
> getContainer	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 89)
> getCount	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 85)
> getDomDocument	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 12)
> load	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 2)
> getElement	427	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 45)
> getForm	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 240)
> getHeader	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
> getHeader	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
> getHeader	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
> moveTo	13	0%	0ms	15.625ms	1.202ms	0ms	15.625ms	scrollable-data-t... (line 55)
> (no name)	5	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 5)
> TimedObserver	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 207)
> getHeight	124	0%	0ms	1750ms	14.113ms	0ms	578.125ms	a4j_3_1_0-SNAPSHO... (line 106)
> getPane	27	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 92)
> getHeader	17	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 206)
> moveTo	6	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 55)
> Insertion	4	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 138)
> getValue	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 209)
> setListeners	400	0%	0ms	15.625ms	0.039ms	0ms	15.625ms	scrollable-data-t... (line 222)
> getWidth	53	0%	0ms	1765.625ms	33.314ms	0ms	875ms	scrollable-data-t... (line 49)
> getX	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
> getX	45	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
> getX	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 66)
> observe	479	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 70)
> include	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 35)
> initialize	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 199)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 238)
> initialize	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 238)
> initialize	1	0%	0ms	15.625ms	15.625ms	15.625ms	15.625ms	scrollable-data-t... (line 238)
> initialize	1	0%	0ms	390.625ms	390.625ms	390.625ms	390.625ms	scrollable-data-t... (line 97)
> initialize	9	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 69)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 75)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 83)
> registerEvents	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 87)
> initialize	2	0%	0ms	7468.75ms	3734.375ms	0ms	7468.75ms	scrollable-data-t... (line 238)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 83)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 90)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 95)
> initialize	1	0%	0ms	7468.75ms	7468.75ms	7468.75ms	7468.75ms	scrollable-data-t... (line 238)
> registerEvents	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 91)
> initialize	1	0%	0ms	2421.875ms	2421.875ms	2421.875ms	2421.875ms	scrollable-data-t... (line 95)
> initialize	1	0%	0ms	2906.25ms	2906.25ms	2906.25ms	2906.25ms	scrollable-data-t... (line 134)
> initialize	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 134)
> inspectRanges	1	0%	0ms	62.5ms	62.5ms	62.5ms	62.5ms	scrollable-data-t... (line 219)
> isFunction	100	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 35)
> isObject	73	0%	0ms	2406.25ms	32.962ms	0ms	406.25ms	scrollable-data-t... (line 38)
> restoreState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 220)
> loadRows	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 86)
> makeAbsolute	12	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 64)
> getState	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 217)
> toQueryString	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 56)
> setHeight	23	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 48)
> moveTo	3	0%	0ms	15.625ms	5.208ms	0ms	15.625ms	scrollable-data-t... (line 55)
> moveToY	15	0%	0ms	15.625ms	1.042ms	0ms	15.625ms	scrollable-data-t... (line 54)
> update	396	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 38)
> observe	475	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 218)
> (no name)	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 194)
> setListeners	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 222)
> setListeners	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 222)
> parseTemplate	1	0%	0ms	312.5ms	312.5ms	312.5ms	312.5ms	scrollable-data-t... (line 185)
> pckg	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 9)
> updateHeaders	2	0%	0ms	406.25ms	203.125ms	187.5ms	218.75ms	scrollable-data-t... (line 126)
> registerEvents	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 91)
> registerEvents	2	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 87)
> updateHeaders	1	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 126)
> setupClass	22	0%	0ms	0ms	0ms	0ms	0ms	extend.js.seam (line 3)
> requireClass	21	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 8)
> requireClass	20	0%	0ms	31.25ms	1.563ms	0ms	15.625ms	scrollable-data-t... (line 8)
> updateLayout	1	0%	0ms	2640.625ms	2640.625ms	2640.625ms	2640.625ms	scrollable-data-t... (line 203)
> getHeight	97	0%	0ms	1781.25ms	18.363ms	0ms	875ms	a4j_3_1_0-SNAPSHO... (line 106)
> getScrollOffset	4	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 207)
> updateLayout	2	0%	0ms	406.25ms	203.125ms	187.5ms	218.75ms	scrollable-data-t... (line 119)
> OnSepMouseMove	43	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 121)
> Level	8	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 94)
> _each	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 60)
> updateLayout	1	0%	0ms	109.375ms	109.375ms	109.375ms	109.375ms	scrollable-data-t... (line 196)
> setWidth	24	0%	0ms	15.625ms	0.651ms	0ms	15.625ms	scrollable-data-t... (line 52)
> (no name)	22	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 194)
> updateLayout	1	0%	0ms	2078.125ms	2078.125ms	2078.125ms	2078.125ms	scrollable-data-t... (line 148)
> moveToX	38	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 53)
> R	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 58)
> OnSepMouseMove	3	0%	0ms	0ms	0ms	0ms	0ms	scrollable-data-t... (line 121)
> _each	1	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 60)
> _calcDefaultRowHeight	1	0%	0ms	703.125ms	703.125ms	703.125ms	703.125ms	scrollable-data-t... (line 183)
> _each	26	0%	0ms	7500ms	288.462ms	0ms	7468.75ms	a4j_3_1_0-SNAPSHO... (line 45)
> unregister	2	0%	0ms	0ms	0ms	0ms	0ms	a4j_3_1_0-SNAPSHO... (line 61)
> Timing of server side rendering from log:
> 2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process before phase RESTORE_VIEW 1
> 2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] before phase: RESTORE_VIEW 1
> 2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] beginning transaction prior to phase: RESTORE_VIEW 1
> 2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] after phase: RESTORE_VIEW 1
> 2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] committing transaction after phase: RESTORE_VIEW 1
> 2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process after phase RESTORE_VIEW 1
> 2007-08-25 22:16:20,562 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process before phase RENDER_RESPONSE 6
> 2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] before phase: RENDER_RESPONSE 6
> 2007-08-25 22:16:20,562 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
> 2007-08-25 22:16:23,796 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] after phase: RENDER_RESPONSE 6
> 2007-08-25 22:16:23,796 DEBUG [org.jboss.seam.jsf.AbstractSeamPhaseListener] committing transaction after phase: RENDER_RESPONSE 6
> 2007-08-25 22:16:23,796 DEBUG [org.ajax4jsf.event.AjaxPhaseListener] Process after phase RENDER_RESPONSE 6
> 2007-08-25 22:16:24,250 DEBUG [org.ajax4jsf.webapp.BaseXMLFilter] Parsing html total time 454ms
> 2007-08-25 22:16:24,250 DEBUG [org.ajax4jsf.webapp.BaseFilter] Finished request processing total time 3688ms for uri: /Table/recordListRich.seam
> Test page
> <ui:composition xmlns="http://www.w3.org/1999/xhtml"
>                 xmlns:s="http://jboss.com/products/seam/taglib"
>                 xmlns:ui="http://java.sun.com/jsf/facelets"
>                 xmlns:f="http://java.sun.com/jsf/core"
>                 xmlns:h="http://java.sun.com/jsf/html"
> 				xmlns:a4j="http://richfaces.org/a4j"
> 				xmlns:rich="http://richfaces.org/rich"
>                 template="layout/template.xhtml">
>                        
> <ui:define name="body">
>     <h1>recordList</h1>
>     <p>Generated list page</p>
>     
>     <h:messages globalOnly="true" styleClass="message"/>
>     
>     <h:outputText value="No record exists" 
>             rendered="#{empty recordList.resultList}"/>
>     <rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="400px" width="100%" id="recordList" columnClasses="col"
>                 value="#{recordList.resultList}" var="record" sortMode="single"
>                 rendered="#{not empty recordList.resultList}">
>         <rich:column id="recId">
>             <f:facet name="header">Id</f:facet>
>             #{record.id}
>         </rich:column>
>         <rich:column id="recName">
>             <f:facet name="header">Name</f:facet>
>             <s:link id="record" value="#{record.name}" view="/record.xhtml">
>                 <f:param name="recordId" value="#{record.id}"/>
>             </s:link>
>         </rich:column>
>         <rich:column id="recF01">
>             <f:facet name="header">F01</f:facet>
>             <s:link id="record" value="#{record.f01}" view="/record.xhtml">
>                 <f:param name="recordId" value="#{record.id}"/>
>             </s:link>
>         </rich:column>
> ...
>     </rich:scrollableDataTable>
>     
>     <div class="actionButtons">
>         <s:button id="done" value="Create record"
>             view="/record.xhtml"/>			  
>     </div>
>     
> </ui:define>
> </ui:composition>
> I hope this can help to fix the performance, cause with current implementation it is waaay to clow
> Thanks

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the richfaces-issues mailing list