Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sortable: Use addClass in _setHandleClassName to improve performance #2063

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

stollr
Copy link

@stollr stollr commented Mar 31, 2022

This addresses #2062 and is relevant for large lists with more than 1000 items.

The solution to the issue was suggested at stackoverflow.com (credits to @Ernst).
At the end this commit restores the function's behaviour of previous 1.11.x version.

This addresses jquery#2062 and is relevant for large lists with more than 1000 items.
The solution to the issue was suggested at
https://stackoverflow.com/a/46925710/1119601 (credits to @Ernst).

At the end this commit restores the function's behaviour of previous 1.11.x
version.
@linux-foundation-easycla
Copy link

linux-foundation-easycla bot commented Mar 31, 2022

CLA Signed

The committers listed above are authorized under a signed CLA.

} );
},

_destroy: function() {
this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at it, I'm not sure about this, it seems to be diverging from how classes are generally managed in jQuery UI.

@fnagel what do you think?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I commented in the ticket that we use this same current workaround because users reported the same thing 4 years ago. The performance difference with 1000 items is 2 seconds instead of 2+ minutes in the browser

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@melloware Thanks, that's an important data point. I'd still want to hear from @fnagel who was involved with UI when the team was larger, I may be lacking some context from those times.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the late response. Still in the process of moving my office and flat.

The thing is that _addClass does keep track of the elements and does some stuff when the element is removed (afair). It's part of the this.options.classes functionality and I think its related to #2037

One objection against this change is that we might reintroduce old issues we once fixed by adding the classes option. Seems we paid for bug fixes with performance penalty.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your reply. If you aren't comfortable with the patch, you can close it.

I have monkey patched that method in my project, so that I can still use v13 ;-)

@cure
Copy link

cure commented Jun 10, 2022

I am also seeing this performance regression in jQuery UI 1.12.1, used as part of redmine 4 (backlogs plugin). Applying the patch (I didn't apply the change to the _destroy function) leads to a pretty spectacular speedup when rendering hundreds of items in a sorted list (it eliminates a ~30s wait), and brings back the performance to the level it was at with jQuery UI 1.11.x. It would be good to see this regression fixed.

@mgol
Copy link
Member

mgol commented Jun 27, 2022

The risk here is that the proposed mechanism skips the logic used to handle classes which can bite in future changes to the library. I'm not that happy with hacks like that as they can bite in the future, edge cases can be discovered, etc.

It'd be better to understand what exactly causes the slowdown and see if there's a fix in the logic possible that would speed things up. See #2037 for an example of such a PR. It solved issue #2014 without skipping any core logic.

I don't have time to dive into this too much at the moment but if anyone finds a proper fix, I'd be happy to review such a PR, feel free to ping me in a PR then.

malyMiso added a commit to shopsys/shopsys that referenced this pull request Feb 4, 2024
malyMiso added a commit to shopsys/shopsys that referenced this pull request Feb 4, 2024
grossmannmartin pushed a commit to shopsys/shopsys that referenced this pull request Feb 7, 2024
grossmannmartin pushed a commit to shopsys/shopsys that referenced this pull request Feb 14, 2024
ShopsysBot pushed a commit to shopsys/framework that referenced this pull request Feb 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

5 participants