Skip to content

Update gem control to lazily sort by DPS#9959

Merged
Wires77 merged 5 commits into
PathOfBuildingCommunity:devfrom
xoxorwr:perf
Jul 24, 2026
Merged

Update gem control to lazily sort by DPS#9959
Wires77 merged 5 commits into
PathOfBuildingCommunity:devfrom
xoxorwr:perf

Conversation

@xoxorwr

@xoxorwr xoxorwr commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Fixes # .

Description of the problem being solved:

Sorting gems by DPS can be very compute intensive, on some builds it can take multiple seconds, and the UI freeze while doing so.

This PR fixes it by sorting gems lazily.

The result is that opening the gem list is now always instant.

Before:

pob-before.mp4

After:

pob-after.mp4

Steps taken to verify a working solution:

  • I opened stock and PR side by side
  • I compared the sorting results

Link to a build that showcases this PR:

eNrtXXtT40iS_3v9KRRE7MVMtKH1fvR274V5MwsNg2F6Zi4uCGEL0CBLtCUD7gm--_2ySo-SLFkyeF-3c3PRi6XMrKqszKzMrKzSx_9-ngTSozeN_Sj8tKFsyRuSF46isR_eftq4vNjftDf--6-9j2ducnd6sz3zA3rz196fPrK_pUffezqJxt6njaOTs9Pziw3JjUdeON4J3Dj-7E7wYufO924S1w83pAc3TO68KDxxf4umB9H408bnKPSE535Yej66c6fuKPGmx96jFwxmScTbSqYzelu0cQK42dibbkgTNDSMRvdecjCNZg8Y0oYUEDb-kjG4xJ3eeslP2YC1Kzy7dsOxn6SNYmx_-ngWuHNvOkzcRIrxz6eNAVjk3nq77gT_bkiPbjBDs6ou65bibOmabjqGtfF-KfL2bBonr6MwfPC8cY6kbDlAa4I9m3p7NzfeKPEfvZ2pn-zcueGoaNFSt2TVtpuwX4dxMgsS_yHwaQZSLH1LMZtQDhfaoLlpAL6IEjfYPRsWlE3TVBRry3AU2daM5XhRkuM1tvDFT-62A3D4Fa0c3YZ-4omIiqwZzpZqmrZiWZq-rNFFZN20TN0yt2zDcmRFXYZ8FvlxFL6BMa_o9M4sCKD_ImYjV8-92Js-uolf7mQj_E40ufbD6iR0YsdOFAXj6Clsb2Qw9dzTG64f5-7Yn8UnXjL14hxT22qU2hM3dHeiuBAozVkGeuZNYQmTEobcgjD0RhGMp4hiGVumZZgdWqrHb2zy2L_xyi0tg1xpNClCTW8UbcuwVbtDSyuOZm_YFW5lwq_r0DnMfDfIYTQLOkImhX1VLctpVr2vIqhiNlLc9Z4LMFVZQrAEqTUSPAqFyVaWGIevJUhDb-7hY0Q2pJ07zK7tHZ4VAq07urKlK6qF5VJuFO-zu3nsj9zgxH32J7MJFqcL994LBfYputossbd3SQib2ITtWLapNWHv-1PvVYg7MHivQ7xzo7hxpCqsf7Ol8cNDeEqD0WgGr2wumEF5qeko5gNrzBIPZ_SBoI_CkdAffRnhy3DK1hjBNbJkZSnKOTSYvLHrwOuMUzSTWoKC08aWpijgtqzqtmkvb_jWC9PW5-Kyq205y_COPW90dwDWn7uJ4C7pqkVOoLZ0XcjBTXs53wlY5PvSZaqO60o3hCr_FHlLg_9rO4Yhy5a2jEgD_9StpU03cA9MNx2teVHdC73p7XyIwCUoBqk1S4kIn_Vxx33ogsr4L-J3modyg3Wc6YRaz55mP9mdjrstfIUDtxRsxa4zA8_izl1CLJZCVd5y7GZbwfA-e8l5CctWjS1ZsRqFAAi54hZIkDhnOVIurZ2kFAgLk9lhEh_dWFwTVXW5fHFwUbSauXXiIRQCxtirxGhyc8QZ_UbxZrAa2mA6iWaCl6IbzY4hGwZHEEdhqW2LOo-3z73xbFTyIuxmZc6C5-0AeYTKYAyjFQ1dDYI63GZGJIk7ut-NxredeccaWQmj3L_h7OEBVpmkoisB8lUQ0_mCo-p0AD6Fbou2UDGdZU5N5xYK4IUWlFZnrXMrFYzuTTE_q9JMs3gL0NUm2if0BOZzgmWVJYmQIBPyRI1Cvo9AXgy0Lc3WkYjasm3E27KyFK1L5iClP7z3g0CKobUjgDYmKvIpDWNvNMVaNJYo4ShFN9JeOIa3yQQ0JmJn7hSQnVpRLdly4KIheWWYyF81tNKZcEv3GviRtrrtxYnE8z0SY99io4s2LHqCLNxRxlJIUHSBhoPfjrA_9cJv8yp9uRN4pwZy5lTbsLpiiM1kSBf-BCtUHO-6iSv95j15wcX8wTtC0lhFTjgKv868aTTNniH9y2B4TphBmZYKkbtxg-AaZveLRypOeeWj8TODjxnovh8g8ZzlmsVnu9BS6iPxShqn4elP7tRHFlthFCoPVU7Wc6eju2Mgf9q4d6cz_yqEX4JA5Modj68euGt8FSMbFd4md31J6Usy_l9E3E_7nIrMx_fMGaK_LqaeJ7mZfR9Rg4xZ9EMCSU_IeKukCiyT4U7ngyJdT8wJ_SBNrKfMGwWzGGM-dOO7_Wg6cYvUuUrJdno355Yo_rTxuwMb0oey6fZL_3fogGP1DdlRVfzSFV0x-jAzho5ftm7KfVOWNfqhIiOk9w045PihqJqt9jVd1QlLww-trzq2hR-mrstmXzcVW37ZkEJMGdpUEXxZfVMDkb5pWKYFXAW9UBwbRDXdcOS-qjsK_a3L-NtUHBBxZFvua8BCDy1bcxguumSYjg14zdboCZpTdNkw0QNH0_qaagFSReigEWVFw1h1ra_Y6AOIWQpQNdtG4zbSlX3TUtAnzcIIDIoTWRsOBmAooMLeIkOhgyumo-M555AhgzoYYhl9A0YZz200resKoeqqzIZpofOKqdpgqGnqANExHNWgTrI5MBFWgbqtOE5fszTV7BuUB-njHehqKjhCBMAtHTOBt-iSzAgrfT5vio4h07-ajB7DUFMjGsaAiQG3FPC3byiG2gdZB101dNtgSGbfMRSiYmDcmqwRnzFzII7Z7uMhOGvCNPcVDBRsk0GcPdHpX_BUo5wv-IA9h75imJZNMoS3Ov61-g5MOpvQPk0SmyXTQH9MjWZVATRWFo2Ei7ijIfXTZ8Jm0B4GZk3WCBPP8dLE35pCkkDxOwYh26aKv6kvXChVwyAYJoWGbROurcgOzRtmT9FUjFmxDZokWybRk_HSVDVMsIGBqUygwF6IOgbJ5Be876syGN43HEflQgEx42JvGYDTwTvgY-h4bkD-0JyF6WSWC4INEcYQDIg0uqoQRUuGhCAqEXffSIE1ZgX-9PHy_Jj98ae7JHmIP7x___T0tPWANSy68Z7ht2-Nosn7ByDBfmyylWmTjMb7Af5v-3ZvdxyE35xvf9v3ZDW-ezbuLqNfb38Nhlezo6ND3XNuzr5dR-NT5UrX_vZwl-x92ZHHm7fWr-PhZfjTwW-_6UhAbCbX4-jLyV5wv__l7ln_Lbn-9niPft1Njybx13B2Ejz5zi8HP33-4ewqPj1-PrwfWRfXmmZ41unsLPG-uHv35v3FwzD5ZjqfH8_G1pN-ebR7aKnHshnsXIa_Gok6Hej21W10ORre3483Ty929fCXswvrQP3h6viHp_iHmRkb9snF4MDXhvv6fPfbzt7J8-HOnmUGs1vFMdyDvbvnr8bs5uDUutu-Cr5Zj8nTjz_uHw-Ni8ev3p568_nx-fbCfbqZfRmcbv94vhn9crJvDm9c9zf15yf7ePRD7B78dHzmhuYvR8-_TJ8OR7s_7oaD08Egut35Oji9H5i3u9PtH0727gfDXwenl4NosDvZ-eEXNRrdeHs7F1fPs4do6H3dOfrx6dI6MOwdc7Z3aJ3fbxru_tNv2x6b0PfZjH7kC1vMpzf9xWwjW-sgOFhB4HRMmD1P19BFQKaLBaCqNQEi6WR3gVMdmLdOgHw5zgC1RkBmwISx2I2AZMsEQLUJkBniLn1klkKgaDYBWo4ptmw0spuMaxeCbB3oBEjLWhdAtvJ1EQm24giAzTMIs1sz6I_vRdH8SHHN1MeSzb249-SZMB-GXBf6gznbMXynGxe7yQfe5Jhv24fkdmTJefLEpvQy3p7Djd6nnIkQzcR30ROFthyGfEB4CIPjY_7m2LtF3pqQP23A_Yvh16UuEzU99JLU_RMayPy_olc_ztzAT-YYtpy6WCmy5I8ztyt9KMVBRK5_NJ5LWbKD6hMGRaM7bjCKeZGCe02jpfILcgrHWcsVBAbrh3DLwPwwHXgKm04POil9FXoJB5q5oTQ7KXOQQ8FGaOyNafO-SJOQ_zwLORt4Nw6C6NoNlKwzt3yOsWfqjuF-vz_CpMfviVvvC7Y3Eg9Rq8G90xxEymCkDEhsV83dbxp6l_6npR6qXOXj--7MOZsFkFU_XhM7BHIFA4SHnQYswK9liEWseBpmPFzTcKukS8OmlxJ_K52GUtF0Ny7Ud3sdHNkLWA4lkyQqsOBpuXg9bPniuQ9RWGlFZE3-KtUE6QldkPI-dOLPskGsxiStzCQh9UGZj0GQ_PwmtlC_8VeFrMiOlmTLcnbUdncdUrITRLFHhSpush6xKBEURk-Ppex5p7kvUWoZ60c-A4tLFZdSSfmnr1MHHjZFsETv0L7Q2wWtRK5gc_r4vzDo-C-xxN4uZ3aJ0JskiqoZvWdvyncl1qBLyA1dRHAzYnGE5VaWj60Mu0578Q-2FSuahz-8hv8s6_eHh_yapeHQCyZe8ndbGHg81mF-zmYY0Pz0hnYY12FXip3KAZyLsrZRS-R48LaW873crzeJ4CEtMePTm0G8FstZIlcMjz-m4bEXy0dXovGmwe162DKY-KG7roWvQrAYYOXF8gFWgNcSUoQBbS154XqMxmCMQwronBv8fFYKHIpmugUJBXw6Sm1FU4AGHmk3759uCqbeyI_XJEYCMcEEFA9btL8AXIfoDKbT6JZHOusQHVSjRCgXvfVHJd-waKST4Ajwbxoj6835WxfTdNoEYsXI2EPpvMNqKaBnp4T0FbVhO4qSfwFlGMQx7d-E2DOf3q_F4U4dB8SE9yH220uikzaWRU68zZbwotzBdagJUToND_01uaMCuWKo9JBSVexxJz0RyLxpkMcIxoeBO1nHZBa0ipHRM4k_XD6uAnkdk0ZFlQkVOK1jynJiwrCyR50mK4fu7henfyLlz_Yv-L4F_Ym48sa_TfcU-I90U4Gh5U_SnQIp8ZPAI9eD7S2kOwdH4cMsYcP5tEE1GmzNR7aziFnpYGOIKq9rnHry3LDcTRF9FnvlEqJWjOvZzQ3KPBL_BprPPaEurSwW-rRi5UND9etkzgujuoxpVAR6_N_zGbmkrXiT_IRiuljMJtdU3pOda6xAUw1sVudTACtLRzLgUei5G1IDK_QIddWj6fwSwRpqoZG_DeY1TaJWauTdoegRCXROwCPOLZQ0ZoiG3BUzDz5TTBQoLGm16DabuUOknaInUNmHgfC69zs90ZqBW3JbdymuOiOnNUPRWhBKFZg5Ulsz4vnXnJUtOHk1dj54nChp7R6erMb58qx15cVDXpy9KM_6Em40qUAbM9KC6ygIUkUoprjLhFVZYjtmM9qIW1SY_QTh6YV_C1tHi0qnqRveYXt6mO6OdBBbQV-xr-JNvTFDZg0OveCmG48KKmXN4R059yYIrcbb80GwihEQS7O76z8teAKj9Q6aUZ0drYvWvkLKSTm6CvhwFKE8coWJzFtYhWWxf-sHpzdsPUVbbJHr2la295_Bo1QjO5DViFM-v1DHvI_vc4eC-SH8V1YM-hMuZuDlECis3fVRoYm60hGVQ3A_6FsUTX75tLGpGtaWZjsaTpMauH8gLTbF6dFPGy4trASXFmKo_NfP-AsVzlTkiZNvOFnJ5-bj0YT8Kcl7ZplnFDbPs-iFvWYBEeu3uAgyd-yKD26BoeXl0o9HV-SfUKkuVVVP2RUVe_v7KJo6-mkvRRl67JwHc7FSNy3AI_I2g8B9iMmtS2s_4tl1zKE_bRC7GDjyQK4fxDXUDgvxX06L0SmgFymx9d734jZCe2wzJrzN4RdJsfsNOnSH94XOWVH5dB2v-Hq8nBTfTN5B1S87MLZIhe_3LydCMHVDgfy4QStzU6iGyaaKHxL4uBNTEqoPwuJB3i7Hqp31zB1o4U12LHaRBrtbog2fAy0i82se2rBTqBquMs-6lascqka-vJE7b8PmQIvI-fHCNgI5YMTC5kVKKGwY-AHVNrTOLC5xYcIOvclRFgmewJqkZettBE9psc9gFylBJ6b-9SxpV2cBsoZX7KB0C5sIpmYs7KjvclQGU8PX0kHXFmskwtYatVYSDGYRNVuHlyNzqNopSNfXFvZzqBomZO57y_hTsBolYcZ18Bj54y6Wogr-ZoLssOEa-kXHCd9Opnq-sIYiPN74vlVfUqhO6GlyR8C-RMiDLNTbiJDGvY0CKd7bKFwgKZzMprVW47zqjiyin9f7IHmmZilyBvVa_KJi67UU-KmzV6Mzf73B_iPvxlziTgtADvw2WuXk2ttoDZNZuAv2rkpqkUtshMsM0sq0-Mq7hGncqKTXj3Sxlxz07YTgFxzWO6ArUMrP3h56bkBXcUXB2whWb2TpTqxG43G2b4Yr9cYZtdNmt38V7mGbC0SL-xfiN_WSZQ8FOghg0wjx4-cIPhKRpqfZj48spJTchwcccMo7iPMESbppjxU-QD4DaZ2nwfiRBPkC0xKXglC2h7AsLEYym1_yxCshWfq-dFSAKIhJffrNRo6zKSygP3epDuSDdD443-t9RhBOEL1tN_TjO8ietB3gioTe8M7FiU_-bo_F_uzPnal7gzz4B4l608Om8o3__EH6fUqZtA8ynWR-OY6QFcire8ppgvR-FSvHpBsNq2SUF1QSeOMiM0MXW6WnTi-eIrrixxtfIg5XekOE2zmZ2h951zRH513Ltg1B0r9PbycweumpiQ-SKvfSYyEfpIPN_L8eyzHgVqgPkiX3EOQF_sgnGKXHg86iDIoTjiX_FidDPInJkXSC7REUcEhFFTV3F6n1uKcYxp9pbzWtqMqYllZU9TRVfFtpSOJD6IFpsaRJSSQZrB4oK9PGg7TGmldsJ3d-LKV1tDTFiixl3O39jsRR_MFl4P2YIu6X30d8yl9yThov3ynmpip_L3YqZQKL0lna6IS2rYGQ7SUxbJxI3spzjyUItRVCa4XQWyGMRYiPbN-urCpavi1IHStpzeXnox8v96AHuM2PlXzPMX2Hs2sUMUo7_nQUeEmPByISj0QgUYbTE2OTbTAsVQQkvUmC0mPYHyRogqRtWVty8WhnNsXkJD2eJgKn8zdqvdBub7L_BIE1nbLA8lmGw8buDehP4AH2sZn5wkmgCV49QDuZ2ORMJFdy5D9LdAOc9F_u5OEvknBzolTcrNn7PWUaNFgQlnffqbKMNJ78PRPFNAuB4gfKHBU4ahlHA47WhCNKoipvKkZZFkv8721q6DyoMJ0olK5ERd7SN-UtG1So2oyLcqo-LPQHUTeWyNmuoKlA01vQyMPuZQYxlmC-pPy6l5h6xgKSDBG2PKJFJJiLmosLCDBK1g7cF3_K7xzo7UTT6ewh-TdTuQqE2QphtULY3RQbBznrtPnizpOOphBm8n4pKoR-z2KXVj1kvxPYVhaaQ3cMy0h_LGpxrTaeb-b_CRpp1Gok6eA7laadQdJk5yo5iPaYQvbeKX9OLT4Bssi6Inpk1A3BqFehS-IGs3UZBrPR_byXL7_vvjOhVCpXvmJtEATfxnu5sgAwrvQUCOmUpBuPsntf0lUho5TV5KQ92I7CGRZLWh7dsXSLVhKsYyJpduFTdVFcWLv-hXRB-UdqQp2c6zWuHp8giddGkiz6OFrghtKBi_1BLFtxLuW2rDUK-RDbL-Ql7j3TNkzqH7rk2UBav0TTAE5IF0_RWOon5vaRW_y0C_pStxH223BecoJkrK2qG6i8ZOLiLL7KUbk6MaHVFx1Jw1Ffiv1Ma6naCypv66LKq73fPcbBFxUKM8o1FHeO-hNEuQn3G7GnIt1EU0lP70OJpYgVegGbeI4u34Biwte2PWxsxcjDpDB9vorQZEGZa5fAd4ZRUnHFbHTpTLVG2d8pCjNXEx4c8gXyna7XNvaftkLV6aXR6lgOAgQ2UV63iIQ03YIBwcK99lAyVsuZKyruF2lU1KoTqq_mg-LK9_U6oXrtkudl-berEUuXvbxTSHbSbENxoDI9khsXi9R3irGp2KUlKJdjFgoxQrYssaqNxWBIXO5wX8-mmq53qWg3-bIOdOl7Jt-cruhQLriyjLa2qThtGAozA8KKV145Bcqq0QVOqfCR71szh-IeU5jA8RSJDmeTCSzqOH9Lcjf1oykcT0gDBAUxAjVDvut-RGUh0jyaLZIoyEsjN8T1UVL6fEKRMFtulIVG1rVyK_8C67ayPv-1AuG0QuAy605GyKw1PD9HD7lnxorOewMmMwMUBCGmRYnt7QyGYhuSN4KzhYLXYB7DAGDFgkOAtTt_JhoEIQitrn9ZXgFJMXgCyKExHffjiZvaBnYtWoDru67cbGNSVCwEflrVRWV4AVahF6WkT6UFqkp9mitkhbwuf18fOTZ2r9xqpV8FgpclgV5Ss4RSItzyz5hAJKoN7lBdRO4Q-CEdiJKe7ryQgsE5LfZMHQcIyd1pdh7s31-Z3hjs1eU7zyl_gJOCLJBgP2CEgmg67uS0OlrZv2xwSJuzkXWpyaU-aeFo6m36ZYj6pfc2VYn3B4vEGDs6Hhlzstwws1gceEv5u_xVRkPA2uGWfJtnGm8BZJTFvEIKEo1iDZwSQbDqlB3Md6a96C-a8hItm4WPHjyU8dUkGvdzvenfALg_ovW0L6pvJVeZrr-qKugxLWHVhTj-I31S0do6fbJr9GnbCxLok_s4l9ifrVFfJT5r158FLVHkxZjMsdQXoZxaLyucoCR22QlVbFGQ40JM5bLYKrK1KLfkitV6dZkUZmVxmS_EyuWki6lLyR1-KuNfSPDqplwxauZ8h9-4Kf1A61nvmF2VU362VAqwvXPDolaE9wx8iNuzcNEsu9svPqD8D_FXq5OeZZiHYGsuXXz_U62J3ttbL8qgtEUpbMWG0GhXZR7xuf4guTnuVUw5uKsx394pA39G-ajEirYhoaoovJYovJrgQbFwB_ae9yMTrfy9KrENtcp75tqn_eNhW4kiGXYaXBWLJeg-SBVPR0gp9pYgs-R2SuGdzsItABUM74yryGJ4w_SxK6pdUu0lWHcQKEkrxVtcrP5IZfDLCLNcBq4vYvFJntpQaiOMIWQ3oWAypjPieAM74U_wI7MkaYixC_ds6s8mRfohn638CT72A40hGvkjBCIQQhyxIBucP2Wikf9iWzH5r_I-Uf44zQAUYLyuLtt9KuAq21KLyRGlh2uJIeJJ8YhZxByy9MrpHSP3R4-TiCIkQdllbFEgU8_4lAVp6SWHd2ihnBTwmJCy_HgWW1V0X7r2kifPC3s-D-nnlBhmd7Jy4nTZNSvslhg6Bl9KLZR9OiEJwN8Uc5O_0tJXpTnK3-rp23KUlr01Km_ZHOZvzcrb8pzmYNbLO12uS-_Y2YvKLOcATo5Zme4_9t7-CbkLxaxxSDKnQzQmLS7IaehRHUn505AM86rFDU3XnCIwI5-Pt9nosmb2LVvJ5bJuv1PMirtpc8-yUuhR9JRXcmAQEq-GSbfIeFUHwi6e7s904p-Via8trdBa14ljD4lCrMZ0Gav0P4qGbZ2_SNpfpOwbqv_by27YrywcuD6VTFVuUP_mRhPpu4ytlBdhia3vC4hz996nW_q_u_AmD3RiTrqeU1pSABncR3MAwMv3w2tY2HsPb-tMfTG9iMv5pxvRJfKOS3ZdKc-9YFdxXHjCZxPncjFOlGM9SCzzw3ggPWU5WRyuxkManWh8V0RPhy7a6BUpMM70MueX0lJTNmrmWO7w7xxwjiJLhe7iiwK9Q8hgNEWy8N-9REjRWiOjEw_cmKwSGpXDk8_86wuQbpy3xH4rxMa7uuqEcxJdn7BECa3Cb4uB1HIs3RbYPLGj4uwc3BV3RJaEN7oY3cjLohu9MbhR6oIbKmtwS8HNKrENi9PzDVC68RnmqLxBs2Koo9WEOo0dpwmXtudSOuXNgJhlqZjm_19eSK3OWeWQQynFHKWXuE5Ds2pXl226m4KM0i6rzJ1Dn2jPAQttqqHFpmdWA6R-kMQbHPn1FhIV6NJtV9N5PUq6vUrp_frQRAS-DF2mLB6beXbyWwhAghRKjHelLNeRNVQD_xnFGhhptnGAbwujoZB96bAGmkowpL0hL10r3h9CVTlAccGXdOZTo3VA7ANxHnGKd_OUrR8SL1quQygPnZ8TFFZob-wh6ds0nG187XksjkaEF2agJl4UIct9wAfhA0EO0lJolVjl1TCoeM-vcpGyrz1L2ZcD62BPhHBmyVxm2xP1wy_KRca1KAIHFmNoAa48fn7YskZQdVEE02seRMeyFoOJVbrPxerusXsloC-MuIRbuY6bSl8qgquX5JJc5nJdtPRFuKa6BjkbEK-NS2upF8HYKM69G_L7pKPJZBYuSr_OJaQ6VpYgrgPOml7IINfBlnf6F6UYMPwoUpldCyMSEfIOQF7T9usBa-eQsBYku9t0sHxhXIdMDGxicwGVdZznHeunLhNvIlopI5GObhhvsttsapFOFqOnWrha3jCkZtE2c1tRKALdTMXcoXp4mIi8S6JaxPXgYq_gMT6iH-TRMAPPTHRVxoFTbPTRya1wcZEous3I1_Q4hxMsT8XvqQq3WZaY2TRmspuauRbw4suedYCZPWb6VdPbXMRLg9-fRt-8sB4qt_BQmBaCufyIWrko8wXR9MKvOroFbF4ZFXi1FqOAZFPEPUeadlRtZIdPFsUY4Pzg35xYz5MJJVsrAKa9ZRJe01UBsrmKqyZ-tlbKlSpOFVzC0aAlKPy1ZnWOxRf8PZf_D3KlKL2AwLEvAnIHUPJvJLVQP36Ii6Lgva8zH-fBxg3HHL5T6PBCqYZNdBVXIKu9CEv4depBroCvt3RLTM1yssWhsCaaxkvFY3EF_7MrEbPcsU2NH7aoFoMLxy1KGeCuzVgvhSWJU-8WiG5haS5IclGZzgimJmYZRftlj1y_onS3L7rGtK2EYTB2sgwLYusUsHMLTmXOuevcGV2R6-Yndag5ldycLaWjtMhO7nuvQlStDI755KsQ0OoFZ-ErJsslRzgG2djSgu5UjsYthAO0g-B1p2901E0WSXSmatbNvhBPcEpidVQjKetFqMpd6F6ef-1O0K5MfvpZ2u4EnMoBNDb7pR2mxeiFyOsdjbhcmhIUIsv1Zilh_qArxjvZuZvujQlcLQ4K3CIdjRRXKUDidf-rkC6tRlm6i-17o3BqU9kyvq_diEhdedZQu21Vsfunldi__PxSV7L6S-qzEZezoGHx9GxnekbDpC6YjHxWS6XlrJkOdlc1W4SzGg52p2y1WIpyENmdrr1EAstBpyiCney02qaqQmxaMKMTaW1lLWVtidPZrZ3KEQFBcXh8ukx9OphqTW0Q9AXB7EyxVSPLZwS7ktVf6I4sZPsWAm6PrXuFgwMvmpcawNRcoxKhFI5TTUKJqt7J6mtGiyhV9kH5uDpRNleVJPEAfvdmrPTYRn78k_YViqVDOJYNmmbHyMCunAUpJQ9WIeR0c8WLbEM-n34s-L41rhaSBWmCeIX-6HKmFtd5woKjt9t6XanjdD6SKqM7EGyL64oESGeS2ssviDVRO5oeB6c_qokSRquDCdf1l3Rf6oYXQYukitCnOz2jjoF85apyrws5U5hLnn_huJ0MsF6rN8yYV_vSjV5VZcopnFUoOXU9wy2Cm3vPI-8h5b-Q-EmJdzC2hlxdddIqd2phUmSJFm8b6d5EaWFjpj2X7BrFJ7V-ximW7DdAPCHrhGZLpLt1QX3Js1FxnqNiA-hiUQ2tjv_MOFcloxM5ve18YiutP2rF_i61YlWQdq4q7WxV2vmqtDNWaees0s5axWo5WKW0s1Zp563azlu1nXFqO-PUdsap7YxT2xmntgul2s4XrZ0vWrvMaR1UuZ11WjvrtHbWae2s09pZp7VLndbOXb2du3o7d_V27uodLGU7d_V27urt3NXbuau3c1dv567Rzl2jnbtGO3eNDqtM1_I6-59d55ulLcUNmYYy3yUlwUtqfktHzFgZfqlM6P9zEbCirv9YWW0dJBUfkSfWCfiLR5E2u5qR9q2vlhdOZpWWdFDCDRBCPdG9UW-ttWwrr5zgWwxXmO0rzCIqLFsPkNmdKyztf-jxsSF1v1xgqaiLBZZcxJnvTwqS3Zfea2_gBIyScHPOkMIs9PTv0dTrSzxTqZEysWkEzAW4EYJLrZSL7X_64TTh82XNd6WmH0nE5xHTj3fQ4WVpcD3HJwAzeZbQX-w6Tc6uL8-P6fOI9IM-zJZ_hKUF32zFZ3BHY7xPyXB9UnUHvQ-hxkfMU6ZfIqXF5tPrPNVqF9QVhpB9NLUWQV-hUW2FRukKBklpQLCaENQVEJp6qa_QyyYaxhpovFpKFN1xtEJM0p_L5YR_I7vaBeXVgooPBZmCpPKfr-mC-vouWBQnFl1gP1_ThVXEtp6C_mYKxpspvFqcdNOg_EDGyPRnHSObCDiyLQsE-M9Odgvl4U_0icvVlakTXkOHDYxQ6HD6c3mHD8jD6aAwVYxVDPF2NJ6n51RX19ROZNQ12K01dUV77ayvLvjLV-s1zZD-WmnUNFMTVv30Z8dlv44hxnoG9FYvSFkRvwHcXq3XK0kD3an4FgJLp2EVAWefW3n9cmzoCmU7c4PGfy4XodrBGyv3-RUWRalll7Iuvqsrj0F7tQ9i65bog_Cfr-C7vnKf9XXxXV0X35WVQ463Ga4aNmqvYcob9L9-GG82QeoahmG8eRjKW4ehrGEYaxPztRFah4xpb56cdYjIKjT4ZaANCOaqPFx9mTHWMN63G6hXLxSKbNAWYB6y85-rxFi6YopBGv-5Qoz1d3NzXqNYDSiq1XkmVo-4GxC0JeN9nR_dNDijyW42IBhNSTDtjY75W_FbeM_Tsvzbz_TFZ9TzDdmnm3nCOuaf1GIVMn_tfXx_hlvOT2_Yt7swuL_2_g9obQO-

Before screenshot:

After screenshot:

@xoxorwr xoxorwr changed the title perf: Lazy DPS sort to reduce dropdown lag perf: Lazy gem DPS sort to avoid blocking UI Jul 21, 2026
@vaisest

vaisest commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

PathOfBuildingCommunity/PathOfBuilding-PoE2#2184

I think something fixing this was already introduced? It's not ported yet: #9921

@xoxorwr

xoxorwr commented Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

Yeah I saw that, it improve things, but ultimately, I think the DPS sort should still be lazy regardless, no matter how fast the calc gets, it'll always take time proportional to gem count and build complexity, and blocking the dropdown on open is a UX problem in itself.

@xoxorwr xoxorwr reopened this Jul 21, 2026
@krryan

krryan commented Jul 21, 2026

Copy link
Copy Markdown

Does typing in the field work during the lazy sorting, and if so, does it cancel/restart the sorting? (That is, was this the default behavior that was inaccessible because of the UI lock?) That would be another colossal win, on top of the basic non-locking behavior.

@xoxorwr

xoxorwr commented Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

Yes, you can filter search, it'll continue to sort in the background, UI is no longer blocked.

2026-07-21.16-25-48.mp4

@LocalIdentity

Copy link
Copy Markdown
Contributor

This needs some form of UI or way to tell the user that the list is still sorting. On very slow builds it could be hard to know if it's done

@xoxorwr

xoxorwr commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

This needs some form of UI or way to tell the user that the list is still sorting. On very slow builds it could be hard to know if it's done

Check the video above, I added an indicator already.

@LocalIdentity LocalIdentity added the enhancement New feature, calculation, or mod label Jul 24, 2026
@Wires77

Wires77 commented Jul 24, 2026

Copy link
Copy Markdown
Member

This looks great, I changed the dots to a percentage to be more explicit, but thanks for the addition!
image

@Wires77 Wires77 changed the title perf: Lazy gem DPS sort to avoid blocking UI Update gem control to lazily sort by DPS Jul 24, 2026
@Wires77
Wires77 merged commit 44cf1a4 into PathOfBuildingCommunity:dev Jul 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature, calculation, or mod

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants