[ 
https://issues.apache.org/jira/browse/MYFACES-4754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18088393#comment-18088393
 ] 

Ben Chester commented on MYFACES-4754:
--------------------------------------

No worries at all! I'm not sure how unique our use case is (the faces product 
is the front end table builder for interfacing with census and survey data, so 
it's not terribly difficult to creep into the hundreds of thousands of elements 
in a table), but by the looks of the changes you were able to just get rid a 
lot of the copying of the DOM-arrays as well, so I'm sure everyone will 
appreciate the performance boost.

> "Maximum call stack size exceeded" when AJAX updating large DOM in Chromium 
> based browsers
> ------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-4754
>                 URL: https://issues.apache.org/jira/browse/MYFACES-4754
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 4.1.3
>            Reporter: Ben Chester
>            Assignee: Werner Punz
>            Priority: Major
>             Fix For: 5.0.0, 4.0.4, 4.1.4
>
>         Attachments: image-2026-06-11-19-42-58-778.png
>
>
> We chased this down to the spread operator used in the bottom of 
> `querySelectAllDeep` in DomQuery.ts. Changing those spread operators that 
> just copy to `.slice()` appears to rectify the issue.
> This is caused by an issue that Chromium (or more specifically V8) is aware 
> of but don't care to fix, the earliest report I could find is from 2022: 
> [https://issues.chromium.org/issues/41467953] .
> The issue is reproducible with the following xhtml, which creates 100,000 
> empty divs (it breaks somewhere between 60k and 70k). I believe the only 
> thing that matters is the total number of elements in the DOM.
> {noformat}
> <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml";
>       xmlns:ui="jakarta.faces.facelets"
>       xmlns:f="jakarta.faces.core"
>       xmlns:h="jakarta.faces.html"
> ><h:body>
>     <h:form>
>         <ui:repeat begin="0" end="100000">
>             <div/>
>         </ui:repeat>
>         <h:outputText value="Test Text"/>
>         <br/>
>         <h:commandLink
>                 id="testButton"
>                 value="Test"
>         >
>             <f:ajax
>                     execute="@this"
>                     render="testButton"
>             />
>         </h:commandLink>
>     </h:form>
> </h:body></html>{noformat}
> I'm happy to prepare a PR for this if that'd help



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to