wip: optimizations
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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()))
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user