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

Improve calculateRoomName performances by using Intl.Collator #1801

Merged
merged 1 commit into from
Jul 21, 2021

Conversation

germain-gg
Copy link
Contributor

@germain-gg germain-gg commented Jul 21, 2021

element-web notes: Improve performance of room name calculation

@germain-gg germain-gg requested a review from a team July 21, 2021 12:18
Comment on lines +687 to +695
const collator = new Intl.Collator();
/**
* Performant language-sensitive string comparison
* @param a the first string to compare
* @param b the second string to compare
*/
export function compare(a: string, b: string): number {
return collator.compare(a, b);
}
Copy link
Member

Choose a reason for hiding this comment

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

kind of annoying that we're duplicating this in react-sdk now, can you open a maintenance issue to use the js-sdk util instead of duplicating along with merging this please

@germain-gg germain-gg merged commit e85038e into develop Jul 21, 2021
@germain-gg germain-gg deleted the gsouquet/localecompare-perf branch July 21, 2021 14:28
williamkray pushed a commit to williamkray/element-web that referenced this pull request Aug 2, 2021
* Sanitize untrusted variables from message previews before translation
Fixes element-hq#18314
* Fix editing of `<sub>` & `<sup`> & `<u>`
[\element-hq#6469](matrix-org/matrix-react-sdk#6469)
Fixes element-hq#18211
* Zoom images in lightbox to where the cursor points
[\element-hq#6418](matrix-org/matrix-react-sdk#6418)
Fixes element-hq#17870
* Avoid hitting the settings store from TextForEvent
[\element-hq#6205](matrix-org/matrix-react-sdk#6205)
Fixes element-hq#17650
* Initial MSC3083 + MSC3244 support
[\element-hq#6212](matrix-org/matrix-react-sdk#6212)
Fixes element-hq#17686 and element-hq#17661
* Navigate to the first room with notifications when clicked on space notification dot
[\element-hq#5974](matrix-org/matrix-react-sdk#5974)
* Add matrix: to the list of permitted URL schemes
[\element-hq#6388](matrix-org/matrix-react-sdk#6388)
* Add "Copy Link" to room context menu
[\element-hq#6374](matrix-org/matrix-react-sdk#6374)
* 💭 Message bubble layout
[\element-hq#6291](matrix-org/matrix-react-sdk#6291)
Fixes element-hq#4635, element-hq#17773 element-hq#16220 and element-hq#7687
* Play only one audio file at a time
[\#6417](matrix-org/matrix-react-sdk#6417)
Fixes element-hq#17439
* Move download button for media to the action bar
[\element-hq#6386](matrix-org/matrix-react-sdk#6386)
Fixes element-hq#17943
* Improved display of one-to-one call history with summary boxes for each call
[\element-hq#6121](matrix-org/matrix-react-sdk#6121)
Fixes element-hq#16409
* Notification settings UI refresh
[\element-hq#6352](matrix-org/matrix-react-sdk#6352)
Fixes element-hq#17782
* Fix EventIndex double handling events and erroring
[\element-hq#6385](matrix-org/matrix-react-sdk#6385)
Fixes element-hq#18008
* Improve reply rendering
[\element-hq#3553](matrix-org/matrix-react-sdk#3553)
Fixes element-hq#9217, element-hq#7633, element-hq#7530, element-hq#7169, element-hq#7151, element-hq#6692 element-hq#6579 and element-hq#17440
* Improve performance of room name calculation
[\element-hq#1801](matrix-org/matrix-js-sdk#1801)
* Fix browser history getting stuck looping back to the same room
[\element-hq#18053](element-hq#18053)
* Fix space shortcuts on layouts with non-English keys in the places of numbers
[\element-hq#17780](element-hq#17780)
Fixes element-hq#17776
* Fix CreateRoomDialog exploding when making public room outside of a space
[\element-hq#6493](matrix-org/matrix-react-sdk#6493)
* Fix regression where registration would soft-crash on captcha
[\element-hq#6505](matrix-org/matrix-react-sdk#6505)
Fixes element-hq#18284
* only send join rule event if we have a join rule to put in it
[\element-hq#6517](matrix-org/matrix-react-sdk#6517)
* Improve the new download button's discoverability and interactions.
[\element-hq#6510](matrix-org/matrix-react-sdk#6510)
* Fix voice recording UI looking broken while microphone permissions are being requested.
[\element-hq#6479](matrix-org/matrix-react-sdk#6479)
Fixes element-hq#18223
* Match colors of room and user avatars in DMs
[\element-hq#6393](matrix-org/matrix-react-sdk#6393)
Fixes element-hq#2449
* Fix onPaste handler to work with copying files from Finder
[\element-hq#5389](matrix-org/matrix-react-sdk#5389)
Fixes element-hq#15536 and element-hq#16255
* Fix infinite pagination loop when offline
[\element-hq#6478](matrix-org/matrix-react-sdk#6478)
Fixes element-hq#18242
* Fix blurhash rounded corners missing regression
[\element-hq#6467](matrix-org/matrix-react-sdk#6467)
Fixes element-hq#18110
* Fix position of the space hierarchy spinner
[\element-hq#6462](matrix-org/matrix-react-sdk#6462)
Fixes element-hq#18182
* Fix display of image messages that lack thumbnails
[\element-hq#6456](matrix-org/matrix-react-sdk#6456)
Fixes element-hq#18175
* Fix crash with large audio files.
[\element-hq#6436](matrix-org/matrix-react-sdk#6436)
Fixes element-hq#18149
* Make diff colors in codeblocks more pleasant
[\element-hq#6355](matrix-org/matrix-react-sdk#6355)
Fixes element-hq#17939
* Show the correct audio file duration while loading the file.
[\element-hq#6435](matrix-org/matrix-react-sdk#6435)
Fixes element-hq#18160
* Fix various timeline settings not applying immediately.
[\element-hq#6261](matrix-org/matrix-react-sdk#6261)
Fixes element-hq#17748
* Fix issues with room list duplication
[\element-hq#6391](matrix-org/matrix-react-sdk#6391)
Fixes element-hq#14508
* Fix grecaptcha throwing useless error sometimes
[\element-hq#6401](matrix-org/matrix-react-sdk#6401)
Fixes element-hq#15142
* Update Emojibase and Twemoji and switch to IamCal (Slack-style) shortcodes
[\element-hq#6347](matrix-org/matrix-react-sdk#6347)
Fixes element-hq#13857 and element-hq#13334
* Respect compound emojis in default avatar initial generation
[\element-hq#6397](matrix-org/matrix-react-sdk#6397)
Fixes element-hq#18040
* Fix bug where the 'other homeserver' field in the server selection dialog would become briefly focus and then unfocus when clicked.
[\element-hq#6394](matrix-org/matrix-react-sdk#6394)
Fixes element-hq#18031
* Standardise spelling and casing of homeserver, identity server, and integration manager
[\element-hq#6365](matrix-org/matrix-react-sdk#6365)
* Fix widgets not receiving decrypted events when they have permission.
[\element-hq#6371](matrix-org/matrix-react-sdk#6371)
Fixes element-hq#17615
* Prevent client hangs when calculating blurhashes
[\element-hq#6366](matrix-org/matrix-react-sdk#6366)
Fixes element-hq#17945
* Exclude state events from widgets reading room events
[\element-hq#6378](matrix-org/matrix-react-sdk#6378)
* Cache feature_spaces\* flags to improve performance
[\element-hq#6381](matrix-org/matrix-react-sdk#6381)
BBaoVanC added a commit to boba-best/element.boba.best that referenced this pull request Aug 3, 2021
* Sanitize untrusted variables from message previews before translation
Fixes element-hq#18314
* Fix editing of `<sub>` & `<sup`> & `<u>`
[\element-hq#6469](matrix-org/matrix-react-sdk#6469)
Fixes element-hq#18211
* Zoom images in lightbox to where the cursor points
[\element-hq#6418](matrix-org/matrix-react-sdk#6418)
Fixes element-hq#17870
* Avoid hitting the settings store from TextForEvent
[\element-hq#6205](matrix-org/matrix-react-sdk#6205)
Fixes element-hq#17650
* Initial MSC3083 + MSC3244 support
[\element-hq#6212](matrix-org/matrix-react-sdk#6212)
Fixes element-hq#17686 and element-hq#17661
* Navigate to the first room with notifications when clicked on space notification dot
[\element-hq#5974](matrix-org/matrix-react-sdk#5974)
* Add matrix: to the list of permitted URL schemes
[\element-hq#6388](matrix-org/matrix-react-sdk#6388)
* Add "Copy Link" to room context menu
[\element-hq#6374](matrix-org/matrix-react-sdk#6374)
* 💭 Message bubble layout
[\element-hq#6291](matrix-org/matrix-react-sdk#6291)
Fixes element-hq#4635, element-hq#17773 element-hq#16220 and element-hq#7687
* Play only one audio file at a time
[\#6417](matrix-org/matrix-react-sdk#6417)
Fixes element-hq#17439
* Move download button for media to the action bar
[\element-hq#6386](matrix-org/matrix-react-sdk#6386)
Fixes element-hq#17943
* Improved display of one-to-one call history with summary boxes for each call
[\element-hq#6121](matrix-org/matrix-react-sdk#6121)
Fixes element-hq#16409
* Notification settings UI refresh
[\element-hq#6352](matrix-org/matrix-react-sdk#6352)
Fixes element-hq#17782
* Fix EventIndex double handling events and erroring
[\element-hq#6385](matrix-org/matrix-react-sdk#6385)
Fixes element-hq#18008
* Improve reply rendering
[\element-hq#3553](matrix-org/matrix-react-sdk#3553)
Fixes element-hq#9217, element-hq#7633, element-hq#7530, element-hq#7169, element-hq#7151, element-hq#6692 element-hq#6579 and element-hq#17440
* Improve performance of room name calculation
[\element-hq#1801](matrix-org/matrix-js-sdk#1801)
* Fix browser history getting stuck looping back to the same room
[\element-hq#18053](element-hq#18053)
* Fix space shortcuts on layouts with non-English keys in the places of numbers
[\element-hq#17780](element-hq#17780)
Fixes element-hq#17776
* Fix CreateRoomDialog exploding when making public room outside of a space
[\element-hq#6493](matrix-org/matrix-react-sdk#6493)
* Fix regression where registration would soft-crash on captcha
[\element-hq#6505](matrix-org/matrix-react-sdk#6505)
Fixes element-hq#18284
* only send join rule event if we have a join rule to put in it
[\element-hq#6517](matrix-org/matrix-react-sdk#6517)
* Improve the new download button's discoverability and interactions.
[\element-hq#6510](matrix-org/matrix-react-sdk#6510)
* Fix voice recording UI looking broken while microphone permissions are being requested.
[\element-hq#6479](matrix-org/matrix-react-sdk#6479)
Fixes element-hq#18223
* Match colors of room and user avatars in DMs
[\element-hq#6393](matrix-org/matrix-react-sdk#6393)
Fixes element-hq#2449
* Fix onPaste handler to work with copying files from Finder
[\element-hq#5389](matrix-org/matrix-react-sdk#5389)
Fixes element-hq#15536 and element-hq#16255
* Fix infinite pagination loop when offline
[\element-hq#6478](matrix-org/matrix-react-sdk#6478)
Fixes element-hq#18242
* Fix blurhash rounded corners missing regression
[\element-hq#6467](matrix-org/matrix-react-sdk#6467)
Fixes element-hq#18110
* Fix position of the space hierarchy spinner
[\element-hq#6462](matrix-org/matrix-react-sdk#6462)
Fixes element-hq#18182
* Fix display of image messages that lack thumbnails
[\element-hq#6456](matrix-org/matrix-react-sdk#6456)
Fixes element-hq#18175
* Fix crash with large audio files.
[\element-hq#6436](matrix-org/matrix-react-sdk#6436)
Fixes element-hq#18149
* Make diff colors in codeblocks more pleasant
[\element-hq#6355](matrix-org/matrix-react-sdk#6355)
Fixes element-hq#17939
* Show the correct audio file duration while loading the file.
[\element-hq#6435](matrix-org/matrix-react-sdk#6435)
Fixes element-hq#18160
* Fix various timeline settings not applying immediately.
[\element-hq#6261](matrix-org/matrix-react-sdk#6261)
Fixes element-hq#17748
* Fix issues with room list duplication
[\element-hq#6391](matrix-org/matrix-react-sdk#6391)
Fixes element-hq#14508
* Fix grecaptcha throwing useless error sometimes
[\element-hq#6401](matrix-org/matrix-react-sdk#6401)
Fixes element-hq#15142
* Update Emojibase and Twemoji and switch to IamCal (Slack-style) shortcodes
[\element-hq#6347](matrix-org/matrix-react-sdk#6347)
Fixes element-hq#13857 and element-hq#13334
* Respect compound emojis in default avatar initial generation
[\element-hq#6397](matrix-org/matrix-react-sdk#6397)
Fixes element-hq#18040
* Fix bug where the 'other homeserver' field in the server selection dialog would become briefly focus and then unfocus when clicked.
[\element-hq#6394](matrix-org/matrix-react-sdk#6394)
Fixes element-hq#18031
* Standardise spelling and casing of homeserver, identity server, and integration manager
[\element-hq#6365](matrix-org/matrix-react-sdk#6365)
* Fix widgets not receiving decrypted events when they have permission.
[\element-hq#6371](matrix-org/matrix-react-sdk#6371)
Fixes element-hq#17615
* Prevent client hangs when calculating blurhashes
[\element-hq#6366](matrix-org/matrix-react-sdk#6366)
Fixes element-hq#17945
* Exclude state events from widgets reading room events
[\element-hq#6378](matrix-org/matrix-react-sdk#6378)
* Cache feature_spaces\* flags to improve performance
[\element-hq#6381](matrix-org/matrix-react-sdk#6381)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Aug 3, 2021
Changes in [1.7.34](https://github.com/vector-im/element-desktop/releases/tag/v1.7.34) (2021-07-02)
===================================================================================================

## 🔒 SECURITY FIXES
 * Sanitize untrusted variables from message previews before translation
   Fixes element-hq/element-web#18314

## ✨ Features
 * Fix editing of `<sub>` & `<sup`> & `<u>`
   [\#6469](matrix-org/matrix-react-sdk#6469)
   Fixes #18211
 * Zoom images in lightbox to where the cursor points
   [\#6418](matrix-org/matrix-react-sdk#6418)
   Fixes #17870
 * Avoid hitting the settings store from TextForEvent
   [\#6205](matrix-org/matrix-react-sdk#6205)
   Fixes #17650
 * Initial MSC3083 + MSC3244 support
   [\#6212](matrix-org/matrix-react-sdk#6212)
   Fixes #17686 and #17661
 * Navigate to the first room with notifications when clicked on space notification dot
   [\#5974](matrix-org/matrix-react-sdk#5974)
 * Add matrix: to the list of permitted URL schemes
   [\#6388](matrix-org/matrix-react-sdk#6388)
 * Add "Copy Link" to room context menu
   [\#6374](matrix-org/matrix-react-sdk#6374)
 * 💭 Message bubble layout
   [\#6291](matrix-org/matrix-react-sdk#6291)
   Fixes #4635, #17773 #16220 and #7687
 * Play only one audio file at a time
   [\#6417](matrix-org/matrix-react-sdk#6417)
   Fixes #17439
 * Move download button for media to the action bar
   [\#6386](matrix-org/matrix-react-sdk#6386)
   Fixes #17943
 * Improved display of one-to-one call history with summary boxes for each call
   [\#6121](matrix-org/matrix-react-sdk#6121)
   Fixes #16409
 * Notification settings UI refresh
   [\#6352](matrix-org/matrix-react-sdk#6352)
   Fixes #17782
 * Fix EventIndex double handling events and erroring
   [\#6385](matrix-org/matrix-react-sdk#6385)
   Fixes #18008
 * Improve reply rendering
   [\#3553](matrix-org/matrix-react-sdk#3553)
   Fixes element-hq/element-web#9217, element-hq/element-web#7633, element-hq/element-web#7530, element-hq/element-web#7169, element-hq/element-web#7151, element-hq/element-web#6692 element-hq/element-web#6579 and #17440
 * Improve performance of room name calculation
   [\#1801](matrix-org/matrix-js-sdk#1801)

## 🐛 Bug Fixes
 * Fix browser history getting stuck looping back to the same room
   [\#18053](element-hq/element-web#18053)
 * Fix space shortcuts on layouts with non-English keys in the places of numbers
   [\#17780](element-hq/element-web#17780)
   Fixes #17776
 * Fix CreateRoomDialog exploding when making public room outside of a space
   [\#6493](matrix-org/matrix-react-sdk#6493)
 * Fix regression where registration would soft-crash on captcha
   [\#6505](matrix-org/matrix-react-sdk#6505)
   Fixes #18284
 * only send join rule event if we have a join rule to put in it
   [\#6517](matrix-org/matrix-react-sdk#6517)
 * Improve the new download button's discoverability and interactions.
   [\#6510](matrix-org/matrix-react-sdk#6510)
 * Fix voice recording UI looking broken while microphone permissions are being requested.
   [\#6479](matrix-org/matrix-react-sdk#6479)
   Fixes #18223
 * Match colors of room and user avatars in DMs
   [\#6393](matrix-org/matrix-react-sdk#6393)
   Fixes #2449
 * Fix onPaste handler to work with copying files from Finder
   [\#5389](matrix-org/matrix-react-sdk#5389)
   Fixes #15536 and #16255
 * Fix infinite pagination loop when offline
   [\#6478](matrix-org/matrix-react-sdk#6478)
   Fixes #18242
 * Fix blurhash rounded corners missing regression
   [\#6467](matrix-org/matrix-react-sdk#6467)
   Fixes #18110
 * Fix position of the space hierarchy spinner
   [\#6462](matrix-org/matrix-react-sdk#6462)
   Fixes #18182
 * Fix display of image messages that lack thumbnails
   [\#6456](matrix-org/matrix-react-sdk#6456)
   Fixes #18175
 * Fix crash with large audio files.
   [\#6436](matrix-org/matrix-react-sdk#6436)
   Fixes #18149
 * Make diff colors in codeblocks more pleasant
   [\#6355](matrix-org/matrix-react-sdk#6355)
   Fixes #17939
 * Show the correct audio file duration while loading the file.
   [\#6435](matrix-org/matrix-react-sdk#6435)
   Fixes #18160
 * Fix various timeline settings not applying immediately.
   [\#6261](matrix-org/matrix-react-sdk#6261)
   Fixes #17748
 * Fix issues with room list duplication
   [\#6391](matrix-org/matrix-react-sdk#6391)
   Fixes #14508
 * Fix grecaptcha throwing useless error sometimes
   [\#6401](matrix-org/matrix-react-sdk#6401)
   Fixes #15142
 * Update Emojibase and Twemoji and switch to IamCal (Slack-style) shortcodes
   [\#6347](matrix-org/matrix-react-sdk#6347)
   Fixes #13857 and #13334
 * Respect compound emojis in default avatar initial generation
   [\#6397](matrix-org/matrix-react-sdk#6397)
   Fixes #18040
 * Fix bug where the 'other homeserver' field in the server selection dialog would become briefly focus and then unfocus when clicked.
   [\#6394](matrix-org/matrix-react-sdk#6394)
   Fixes #18031
 * Standardise spelling and casing of homeserver, identity server, and integration manager
   [\#6365](matrix-org/matrix-react-sdk#6365)
 * Fix widgets not receiving decrypted events when they have permission.
   [\#6371](matrix-org/matrix-react-sdk#6371)
   Fixes #17615
 * Prevent client hangs when calculating blurhashes
   [\#6366](matrix-org/matrix-react-sdk#6366)
   Fixes #17945
 * Exclude state events from widgets reading room events
   [\#6378](matrix-org/matrix-react-sdk#6378)
 * Cache feature_spaces\* flags to improve performance
   [\#6381](matrix-org/matrix-react-sdk#6381)

Changes in [1.7.33](https://github.com/vector-im/element-web/releases/tag/v1.7.33) (2021-07-19)
===============================================================================================
[Full Changelog](element-hq/element-web@v1.7.33-rc.1...v1.7.33)

 * No changes from rc.1

Changes in [1.7.33-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.33-rc.1) (2021-07-14)
=========================================================================================================
[Full Changelog](element-hq/element-web@v1.7.32...v1.7.33-rc.1)

 * Translations update from Weblate
   [\#17991](element-hq/element-web#17991)
 * Revert "Don't run nginx as root in docker"
   [\#17990](element-hq/element-web#17990)
 * Don't run nginx as root in docker
   [\#17927](element-hq/element-web#17927)
 * Add VS Code to gitignore
   [\#17982](element-hq/element-web#17982)
 * Remove canvas native dependencies from Dockerfile
   [\#17973](element-hq/element-web#17973)
 * Remove node-canvas devDependency
   [\#17967](element-hq/element-web#17967)
 * Add `reskindex` to development steps
   [\#17926](element-hq/element-web#17926)
 * Update Modernizr and stop it from polluting classes on the html tag
   [\#17921](element-hq/element-web#17921)
 * Convert a few files to TS
   [\#17895](element-hq/element-web#17895)
 * Do not generate a lockfile when running in CI
   [\#17902](element-hq/element-web#17902)
 * Fix lockfile to match listed dependencies
   [\#17888](element-hq/element-web#17888)
 * Remove PostCSS calc() processing
   [\#17856](element-hq/element-web#17856)
 * Make issue template styling more consistent and improve PR template
   [\#17691](element-hq/element-web#17691)
 * Update jsrsasign to ^10.2.0 (Includes fix for CVE-2021-30246)
   [\#17170](element-hq/element-web#17170)
 * Migrate to `eslint-plugin-matrix-org`
   [\#17847](element-hq/element-web#17847)
 * Remove spurious overflow: auto on #matrixchat element
   [\#17647](element-hq/element-web#17647)
 * Enhance security by disallowing CSP object-src rule
   [\#17818](element-hq/element-web#17818)
bradjones1 added a commit to bradjones1/matrix-js-sdk that referenced this pull request Mar 2, 2022
…ocalecompare-perf"

This reverts commit e85038e, reversing
changes made to a878588.
@bradjones1
Copy link

Dropping a quite note here to hopefully save others time - Intl isn't present in React Native < 65.0, so this will result in errors like Can't find variable: Intl when running on Expo SDK <= 44. (There's not yet an Expo SDK rolled that includes RN 65.) I ended up monkey-patching this with a revert since this is (hopefully) a temporary condition. Whew.

@byanes
Copy link

byanes commented Apr 26, 2022

I am facing the same issue in React Native with Expo. Are there any plans of changing/patching this?

@t3chguy
Copy link
Member

t3chguy commented Apr 26, 2022

This project aims for Node 10 compatibility, Intl has been in Node since 0.12.0 so you'll need to find a way of having Expo polyfill it.

@bradjones1
Copy link

bradjones1 commented Apr 26, 2022

@byanes Per my comment above, you'll have Intl in Expo once they roll an SDK release which includes React Native 65. See https://github.com/expo/fyi/blob/main/react-native-releases.md#so-when-will-expo-support-react-native-latest_version for their policy (which isn't much help for understanding "when" you'll get it, but it does set expectations.)

You can maintain a fork of this project and revert the applicable commit, as I am doing here.

@bradjones1
Copy link

Expo SDK 45 includes RN 0.68, FYI.

@byanes
Copy link

byanes commented May 21, 2022

Expo SDK 45 includes RN 0.68, FYI.

Thanks for the heads up! I'll give it a try.

@bradjones1
Copy link

I've confirmed this works with Hermes JS engine in RN 0.68.

@jpschw
Copy link

jpschw commented Jul 3, 2022

For everyone using Expo - you can enable Hermes in app.json to get rid of the error:
https://docs.expo.dev/guides/using-hermes/

Thank you @bradjones1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants