]> source.dussan.org Git - jquery-ui.git/commit
Widget: Optimize attachment of the _untrackClassesElement listener
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Sat, 15 Jan 2022 00:26:23 +0000 (01:26 +0100)
committerGitHub <noreply@github.com>
Sat, 15 Jan 2022 00:26:23 +0000 (01:26 +0100)
commit0c5becce0e395b89de0f526e857e7ca2717d4ab2
treec1a096b9d08aa473522ff1c5e6b2405f3ee79b5c
parent4a7cec365be53b17cc9f4a27bb75adea1fc3b14d
Widget: Optimize attachment of the _untrackClassesElement listener

jQuery UI 1.13.0 changed the logic attaching the `_untrackClassesElement`
listener in the `_classes` widget method; one of the side effects was calling
`this._on` for each node that needed the listener. That caused a severe
performance degradation for large comboboxes as each `_on` jQuery UI call
causes a jQuery `add` call that calls Sizzle's `uniqueSort` underneath.

Instead, collect the nodes that need the listener and then, outside of the loop,
create a jQuery object out of them and attach the listener once. That's still
slower than the jQuery 1.12 version but only slightly: 936 ms to 1.03s on a very
large list on a recent MacBook Pro, compared to ~30 seconds before this patch.

Fixes gh-2014
Closes gh-2037
tests/unit/autocomplete/core.js
tests/unit/selectmenu/core.js
tests/unit/tabs/core.js
ui/widget.js