wip: optimizations

This commit is contained in:
2026-05-23 15:28:40 +02:00
parent 5bf506af03
commit 155fe20862
89 changed files with 7431 additions and 392 deletions

View File

@@ -417,6 +417,63 @@ export function areRoomMembersEqual(
secondMembers: RoomMember[] = []
): boolean {
const now = Date.now();
const first = pruneRoomMembers(firstMembers, now);
const second = pruneRoomMembers(secondMembers, now);
return JSON.stringify(pruneRoomMembers(firstMembers, now)) === JSON.stringify(pruneRoomMembers(secondMembers, now));
if (first.length !== second.length) {
return false;
}
for (let memberIndex = 0; memberIndex < first.length; memberIndex++) {
if (!areRoomMembersIdentical(first[memberIndex], second[memberIndex])) {
return false;
}
}
return true;
}
function areRoomMembersIdentical(firstMember: RoomMember, secondMember: RoomMember): boolean {
if (firstMember === secondMember) {
return true;
}
return firstMember.id === secondMember.id
&& firstMember.oderId === secondMember.oderId
&& firstMember.username === secondMember.username
&& firstMember.displayName === secondMember.displayName
&& firstMember.role === secondMember.role
&& firstMember.avatarUrl === secondMember.avatarUrl
&& firstMember.avatarHash === secondMember.avatarHash
&& firstMember.avatarMime === secondMember.avatarMime
&& firstMember.avatarUpdatedAt === secondMember.avatarUpdatedAt
&& firstMember.profileUpdatedAt === secondMember.profileUpdatedAt
&& firstMember.description === secondMember.description
&& firstMember.joinedAt === secondMember.joinedAt
&& firstMember.lastSeenAt === secondMember.lastSeenAt
&& areRoleIdsEqual(firstMember.roleIds, secondMember.roleIds);
}
function areRoleIdsEqual(
firstRoleIds: string[] | undefined,
secondRoleIds: string[] | undefined
): boolean {
if (firstRoleIds === secondRoleIds) {
return true;
}
const first = firstRoleIds ?? [];
const second = secondRoleIds ?? [];
if (first.length !== second.length) {
return false;
}
for (let roleIndex = 0; roleIndex < first.length; roleIndex++) {
if (first[roleIndex] !== second[roleIndex]) {
return false;
}
}
return true;
}

View File

@@ -61,7 +61,7 @@ type BlockedRoomAccessAction =
| ReturnType<typeof RoomsActions.forgetRoom>
| ReturnType<typeof RoomsActions.joinRoomFailure>;
const VIEW_SERVER_LOAD_DELAY_MS = 75;
const VIEW_SERVER_LOAD_DELAY_MS = 0;
@Injectable()
export class RoomsEffects {
@@ -642,9 +642,11 @@ export class RoomsEffects {
onViewServerSuccess$ = createEffect(() =>
this.actions$.pipe(
ofType(RoomsActions.viewServerSuccess),
switchMap(({ room }) => timer(VIEW_SERVER_LOAD_DELAY_MS).pipe(
mergeMap(() => [MessagesActions.loadMessages({ roomId: room.id }), UsersActions.loadBans()])
))
switchMap(({ room }) => VIEW_SERVER_LOAD_DELAY_MS > 0
? timer(VIEW_SERVER_LOAD_DELAY_MS).pipe(
mergeMap(() => [MessagesActions.loadMessages({ roomId: room.id }), UsersActions.loadBans()])
)
: of(MessagesActions.loadMessages({ roomId: room.id }), UsersActions.loadBans()))
)
);