mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-04 22:06:06 +02:00
improve sharedFeed performance
This commit is contained in:
+77
-41
@@ -262,12 +262,13 @@ export const useSharedFeedStore = defineStore('SharedFeed', () => {
|
|||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const bias = new Date(Date.now() - 86400000).toJSON(); // 24 hours
|
const bias = new Date(Date.now() - 1000 * 60 * 60 * 12).toJSON(); // 12 hours
|
||||||
const wristArr = [];
|
const wristArr = [];
|
||||||
let w = 0;
|
let w = 0;
|
||||||
const wristFilter = notificationsSettingsStore.sharedFeedFilters.wrist;
|
const wristFilter = notificationsSettingsStore.sharedFeedFilters.wrist;
|
||||||
let currentUserLeaveTime = 0;
|
let currentUserLeaveTime = 0;
|
||||||
let locationJoinTime = 0;
|
let locationJoinTime = 0;
|
||||||
|
let earliestKeptTime = 0;
|
||||||
for (i = sessionTable.length - 1; i > -1; i--) {
|
for (i = sessionTable.length - 1; i > -1; i--) {
|
||||||
const ctx = sessionTable[i];
|
const ctx = sessionTable[i];
|
||||||
if (ctx.created_at < bias) {
|
if (ctx.created_at < bias) {
|
||||||
@@ -276,21 +277,30 @@ export const useSharedFeedStore = defineStore('SharedFeed', () => {
|
|||||||
if (ctx.type === 'Notification') {
|
if (ctx.type === 'Notification') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
let ctxTime = 0;
|
||||||
|
if (w >= 50 && earliestKeptTime > 0) {
|
||||||
|
ctxTime = Date.parse(ctx.created_at);
|
||||||
|
if (ctxTime < earliestKeptTime - 20 * 1000) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
// on Location change remove OnPlayerLeft
|
// on Location change remove OnPlayerLeft
|
||||||
if (ctx.type === 'LocationDestination') {
|
if (ctx.type === 'LocationDestination') {
|
||||||
currentUserLeaveTime = Date.parse(ctx.created_at);
|
if (!ctxTime) {
|
||||||
|
ctxTime = Date.parse(ctx.created_at);
|
||||||
|
}
|
||||||
|
currentUserLeaveTime = ctxTime;
|
||||||
const currentUserLeaveTimeOffset =
|
const currentUserLeaveTimeOffset =
|
||||||
currentUserLeaveTime + 5 * 1000;
|
currentUserLeaveTime + 5 * 1000;
|
||||||
for (var k = w - 1; k > -1; k--) {
|
for (var k = w - 1; k > -1; k--) {
|
||||||
var feedItem = wristArr[k];
|
var feedItem = wristArr[k];
|
||||||
|
const feedItemTime = Date.parse(feedItem.created_at);
|
||||||
if (
|
if (
|
||||||
(feedItem.type === 'OnPlayerLeft' ||
|
(feedItem.type === 'OnPlayerLeft' ||
|
||||||
feedItem.type === 'BlockedOnPlayerLeft' ||
|
feedItem.type === 'BlockedOnPlayerLeft' ||
|
||||||
feedItem.type === 'MutedOnPlayerLeft') &&
|
feedItem.type === 'MutedOnPlayerLeft') &&
|
||||||
Date.parse(feedItem.created_at) >=
|
feedItemTime >= currentUserLeaveTime &&
|
||||||
currentUserLeaveTime &&
|
feedItemTime <= currentUserLeaveTimeOffset
|
||||||
Date.parse(feedItem.created_at) <=
|
|
||||||
currentUserLeaveTimeOffset
|
|
||||||
) {
|
) {
|
||||||
wristArr.splice(k, 1);
|
wristArr.splice(k, 1);
|
||||||
w--;
|
w--;
|
||||||
@@ -299,17 +309,20 @@ export const useSharedFeedStore = defineStore('SharedFeed', () => {
|
|||||||
}
|
}
|
||||||
// on Location change remove OnPlayerJoined
|
// on Location change remove OnPlayerJoined
|
||||||
if (ctx.type === 'Location') {
|
if (ctx.type === 'Location') {
|
||||||
locationJoinTime = Date.parse(ctx.created_at);
|
if (!ctxTime) {
|
||||||
|
ctxTime = Date.parse(ctx.created_at);
|
||||||
|
}
|
||||||
|
locationJoinTime = ctxTime;
|
||||||
const locationJoinTimeOffset = locationJoinTime + 20 * 1000;
|
const locationJoinTimeOffset = locationJoinTime + 20 * 1000;
|
||||||
for (let k = w - 1; k > -1; k--) {
|
for (let k = w - 1; k > -1; k--) {
|
||||||
let feedItem = wristArr[k];
|
let feedItem = wristArr[k];
|
||||||
|
const feedItemTime = Date.parse(feedItem.created_at);
|
||||||
if (
|
if (
|
||||||
(feedItem.type === 'OnPlayerJoined' ||
|
(feedItem.type === 'OnPlayerJoined' ||
|
||||||
feedItem.type === 'BlockedOnPlayerJoined' ||
|
feedItem.type === 'BlockedOnPlayerJoined' ||
|
||||||
feedItem.type === 'MutedOnPlayerJoined') &&
|
feedItem.type === 'MutedOnPlayerJoined') &&
|
||||||
Date.parse(feedItem.created_at) >= locationJoinTime &&
|
feedItemTime >= locationJoinTime &&
|
||||||
Date.parse(feedItem.created_at) <=
|
feedItemTime <= locationJoinTimeOffset
|
||||||
locationJoinTimeOffset
|
|
||||||
) {
|
) {
|
||||||
wristArr.splice(k, 1);
|
wristArr.splice(k, 1);
|
||||||
w--;
|
w--;
|
||||||
@@ -351,40 +364,56 @@ export const useSharedFeedStore = defineStore('SharedFeed', () => {
|
|||||||
}
|
}
|
||||||
// BlockedOnPlayerJoined, BlockedOnPlayerLeft, MutedOnPlayerJoined, MutedOnPlayerLeft
|
// BlockedOnPlayerJoined, BlockedOnPlayerLeft, MutedOnPlayerJoined, MutedOnPlayerLeft
|
||||||
if (ctx.type === 'OnPlayerJoined' || ctx.type === 'OnPlayerLeft') {
|
if (ctx.type === 'OnPlayerJoined' || ctx.type === 'OnPlayerLeft') {
|
||||||
for (var ref of moderationStore.cachedPlayerModerations.values()) {
|
if (
|
||||||
if (
|
ctx.userId &&
|
||||||
ref.targetDisplayName !== ctx.displayName &&
|
!moderationStore.cachedPlayerModerationsUserIds.has(
|
||||||
ref.sourceUserId !== ctx.userId
|
ctx.userId
|
||||||
) {
|
)
|
||||||
continue;
|
) {
|
||||||
}
|
// no moderation for this userId, skip
|
||||||
|
} else {
|
||||||
|
for (var ref of moderationStore.cachedPlayerModerations.values()) {
|
||||||
|
if (
|
||||||
|
ref.targetDisplayName !== ctx.displayName &&
|
||||||
|
ref.sourceUserId !== ctx.userId
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let type = '';
|
let type = '';
|
||||||
if (ref.type === 'block') {
|
if (ref.type === 'block') {
|
||||||
type = `Blocked${ctx.type}`;
|
type = `Blocked${ctx.type}`;
|
||||||
} else if (ref.type === 'mute') {
|
} else if (ref.type === 'mute') {
|
||||||
type = `Muted${ctx.type}`;
|
type = `Muted${ctx.type}`;
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entry = {
|
const entry = {
|
||||||
created_at: ctx.created_at,
|
created_at: ctx.created_at,
|
||||||
type,
|
type,
|
||||||
displayName: ref.targetDisplayName,
|
displayName: ref.targetDisplayName,
|
||||||
userId: ref.targetUserId,
|
userId: ref.targetUserId,
|
||||||
isFriend,
|
isFriend,
|
||||||
isFavorite
|
isFavorite
|
||||||
};
|
};
|
||||||
if (
|
if (
|
||||||
wristFilter[type] &&
|
wristFilter[type] &&
|
||||||
(wristFilter[type] === 'Everyone' ||
|
(wristFilter[type] === 'Everyone' ||
|
||||||
(wristFilter[type] === 'Friends' && isFriend) ||
|
(wristFilter[type] === 'Friends' && isFriend) ||
|
||||||
(wristFilter[type] === 'VIP' && isFavorite))
|
(wristFilter[type] === 'VIP' && isFavorite))
|
||||||
) {
|
) {
|
||||||
wristArr.unshift(entry);
|
wristArr.unshift(entry);
|
||||||
|
const entryTime = Date.parse(entry.created_at);
|
||||||
|
if (
|
||||||
|
!earliestKeptTime ||
|
||||||
|
entryTime < earliestKeptTime
|
||||||
|
) {
|
||||||
|
earliestKeptTime = entryTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notificationStore.queueGameLogNoty(entry);
|
||||||
}
|
}
|
||||||
notificationStore.queueGameLogNoty(entry);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// when too many user joins happen at once when switching instances
|
// when too many user joins happen at once when switching instances
|
||||||
@@ -406,8 +435,15 @@ export const useSharedFeedStore = defineStore('SharedFeed', () => {
|
|||||||
isFavorite
|
isFavorite
|
||||||
});
|
});
|
||||||
++w;
|
++w;
|
||||||
|
if (!ctxTime) {
|
||||||
|
ctxTime = Date.parse(ctx.created_at);
|
||||||
|
}
|
||||||
|
if (!earliestKeptTime || ctxTime < earliestKeptTime) {
|
||||||
|
earliestKeptTime = ctxTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
wristArr.splice(50);
|
||||||
sharedFeed.value.gameLog.wrist = wristArr;
|
sharedFeed.value.gameLog.wrist = wristArr;
|
||||||
sharedFeed.value.pendingUpdate = true;
|
sharedFeed.value.pendingUpdate = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user