[ 
https://issues.apache.org/jira/browse/WICKET-6800?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martin Tzvetanov Grigorov updated WICKET-6800:
----------------------------------------------
    Affects Version/s:     (was: 9.0.0-M6)
                       9.0.0-M5

> Use LinkedHashSet instead of LinkedList for AjaxRequestHandler#listeners
> ------------------------------------------------------------------------
>
>                 Key: WICKET-6800
>                 URL: https://issues.apache.org/jira/browse/WICKET-6800
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket
>    Affects Versions: 9.0.0-M5, 8.8.0
>            Reporter: Martin Tzvetanov Grigorov
>            Assignee: Martin Tzvetanov Grigorov
>            Priority: Minor
>             Fix For: 7.17.0, 9.0.0-M6, 8.9.0
>
>
> https://github.com/apache/wicket/pull/438
> Urs Joss:
> While migrating my project (see PR there) from the mocking library mockito to 
> mock, I ran into weird performance issues. The build time jumped from roughly 
> 20 minutes to eventually more than 4 hours. I took some effort improving 
> various things in my own code (less mocking, more memory etc.) but did not 
> bring it down considerably until I addressed a bottleneck I found in wicket.
> AjaxRequestHandler maintains a collection of listeners in a LinkedList. When 
> client code adds a new listener calling method addListener, it uses the 
> collection's method contains to assert we don't add a listener to the 
> collection twice. This doesn't scale well. For some reason, my setup with 
> mockk seems to add many more listeners than what my code did with mockito, so 
> I ran into this issue with continuously slower test executions.
> I managed to temporarily resolve the problem in my project by plugging in my 
> own copy of AjaxRequestHandler where I swapped the collection type from 
> LinkedList to LinkedHashSet (calling setAjaxRequestTargetProvider in my 
> TestApplication). With this approach the total build time went down again to 
> 20-30 minutes.
> This PR serves the purpose of starting a discussion about whether this change 
> would be feasible to implement in wicket directly. To me, it is not apparent 
> why a LinkedList had been chosen initially. The LinkedHashSet performs much 
> better with contains and still preserves insertion order. If that latter 
> should turn out to be not relevant, we could even consider using a HashSet 
> instead of a linked HashSet, but I presume insertion order is important.
> A separate topic on my side will be to figure out why my setup with mockito 
> seemed to work well while migrating to mockk surfaced this issue.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to