You've already forked matrix-js-sdk
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:
@@ -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 () {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
10
src/utils.ts
10
src/utils.ts
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user