perf: 优化渲染消息内容定位效率

pull/56/head
moonrailgun 2 years ago
parent 64d8cfc08e
commit b45469c647

@ -9,10 +9,8 @@ import {
useCachedUserInfo, useCachedUserInfo,
MessageHelper, MessageHelper,
} from 'tailchat-shared'; } from 'tailchat-shared';
import { Avatar } from '@/components/Avatar';
import { useRenderPluginMessageInterpreter } from './useRenderPluginMessageInterpreter'; import { useRenderPluginMessageInterpreter } from './useRenderPluginMessageInterpreter';
import { getMessageRender, pluginMessageExtraParsers } from '@/plugin/common'; import { getMessageRender, pluginMessageExtraParsers } from '@/plugin/common';
import { Icon } from '@/components/Icon';
import { Divider, Dropdown } from 'antd'; import { Divider, Dropdown } from 'antd';
import { UserName } from '@/components/UserName'; import { UserName } from '@/components/UserName';
import clsx from 'clsx'; import clsx from 'clsx';
@ -22,7 +20,7 @@ import { TcPopover } from '@/components/TcPopover';
import { useMessageReactions } from './useMessageReactions'; import { useMessageReactions } from './useMessageReactions';
import { stopPropagation } from '@/utils/dom-helper'; import { stopPropagation } from '@/utils/dom-helper';
import { useUserInfoList } from 'tailchat-shared/hooks/model/useUserInfoList'; import { useUserInfoList } from 'tailchat-shared/hooks/model/useUserInfoList';
import { AutoFolder } from 'tailchat-design'; import { AutoFolder, Avatar, Icon } from 'tailchat-design';
import './Item.less'; import './Item.less';
/** /**
@ -240,27 +238,16 @@ const ChatMessageItem: React.FC<ChatMessageItemProps> = React.memo((props) => {
}); });
ChatMessageItem.displayName = 'ChatMessageItem'; ChatMessageItem.displayName = 'ChatMessageItem';
function findMessageIndexWithId(
messages: ChatMessage[],
messageId: string
): number {
return messages.findIndex((m) => m._id === messageId);
}
/** /**
* *
*/ */
export function buildMessageItemRow( export function buildMessageItemRow(messages: ChatMessage[], index: number) {
messages: ChatMessage[], const message = messages[index];
messageId: string
) { if (message) {
const index = findMessageIndexWithId(messages, messageId); // TODO: 这里是因为mattermost的动态列表传的id因此只能这边再用id找回可以看看是否可以优化
if (index === -1) {
return <div />; return <div />;
} }
const message = messages[index];
let showDate = true; let showDate = true;
let showAvatar = true; let showAvatar = true;
const messageCreatedAt = new Date(message.createdAt ?? ''); const messageCreatedAt = new Date(message.createdAt ?? '');

@ -67,7 +67,7 @@ export const NormalMessageList: React.FC<MessageListProps> = React.memo(
> >
<div> <div>
{props.messages.map((message, index, arr) => {props.messages.map((message, index, arr) =>
buildMessageItemRow(arr, message._id) buildMessageItemRow(arr, index)
)} )}
</div> </div>
</div> </div>

@ -83,7 +83,7 @@ export const VirtualizedMessageList: React.FC<MessageListProps> = React.memo(
const itemContent = useMemoizedFn((virtuosoIndex: number) => { const itemContent = useMemoizedFn((virtuosoIndex: number) => {
const index = virtuosoIndex + numItemsPrepended - PREPEND_OFFSET; const index = virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
return buildMessageItemRow(props.messages, props.messages[index]._id); return buildMessageItemRow(props.messages, index);
}); });
return ( return (

Loading…
Cancel
Save