Ben Chester created MYFACES-4754:
------------------------------------

             Summary: "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


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