1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-25 05:23:13 +03:00

Remove the compare function from utils (#4315)

* Remove the compare function from utils

and change the one use of it to just intantiate a collator and use
it.

This was marked as internal module so this shouldn't be a breaking change.
Of course, react-sdk was using it.

Requires: https://github.com/matrix-org/matrix-react-sdk/pull/12782

* Add simple not-a-perf-test test

* recalculate repeatedly

otherwise we aren't testing anything different

* Use fewer members as it was making the test take a bit too long
This commit is contained in:
David Baker
2024-07-17 15:18:46 +01:00
committed by GitHub
parent 30a26813ec
commit 6f63ff1711
3 changed files with 19 additions and 12 deletions

View File

@@ -1394,6 +1394,22 @@ describe("Room", function () {
expect(name).toEqual(userB); expect(name).toEqual(userB);
}); });
}); });
it("recalculates in acceptable time without heroes", function () {
for (let i = 0; i < 5000; i++) {
addMember(`@person${i}:bar`, KnownMembership.Join, { name: `Person ${i % 20} ${i % 10} ${i % 3}` });
}
// This isn't a real performance test and has plenty of headroom because github
// runners don't offer any kind of speed consistency guarantee, but this should at
// least assert that the perf doesn't suddenly become n^2.
const start = performance.now();
for (let i = 0; i < 50; i++) {
room.recalculate();
}
const duration = performance.now() - start;
expect(duration).toBeLessThan(200);
});
}); });
describe("receipts", function () { describe("receipts", function () {

View File

@@ -24,7 +24,7 @@ import {
} from "./event-timeline-set"; } from "./event-timeline-set";
import { Direction, EventTimeline } from "./event-timeline"; import { Direction, EventTimeline } from "./event-timeline";
import { getHttpUriForMxc } from "../content-repo"; import { getHttpUriForMxc } from "../content-repo";
import { compare, removeElement } from "../utils"; import { removeElement } from "../utils";
import { normalize, noUnsafeEventProps } from "../utils"; import { normalize, noUnsafeEventProps } from "../utils";
import { IEvent, IThreadBundledRelationship, MatrixEvent, MatrixEventEvent, MatrixEventHandlerMap } from "./event"; import { IEvent, IThreadBundledRelationship, MatrixEvent, MatrixEventEvent, MatrixEventHandlerMap } from "./event";
import { EventStatus } from "./event-status"; import { EventStatus } from "./event-status";
@@ -3451,7 +3451,8 @@ export class Room extends ReadReceipt<RoomEmittedEvents, RoomEventHandlerMap> {
return true; return true;
}); });
// make sure members have stable order // make sure members have stable order
otherMembers.sort((a, b) => compare(a.userId, b.userId)); const collator = new Intl.Collator();
otherMembers.sort((a, b) => collator.compare(a.userId, b.userId));
// only 5 first members, immitate summaryHeroes // only 5 first members, immitate summaryHeroes
otherMembers = otherMembers.slice(0, 5); otherMembers = otherMembers.slice(0, 5);
otherNames = otherMembers.map((m) => m.name); otherNames = otherMembers.map((m) => m.name);

View File

@@ -649,16 +649,6 @@ export function lexicographicCompare(a: string, b: string): number {
} }
} }
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);
}
/** /**
* This function is similar to Object.assign() but it assigns recursively and * This function is similar to Object.assign() but it assigns recursively and
* allows you to ignore nullish values from the source * allows you to ignore nullish values from the source