Skip to content

Commit 014c646

Browse files
committed
perf: render messages concurrently
1 parent 26a01e1 commit 014c646

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/generator/index.tsx

+13-11
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { revealSpoiler, scrollToMessage } from '../static/client';
99
import { readFileSync } from 'fs';
1010
import path from 'path';
1111
import { renderToString } from '@derockdev/discord-components-core/hydrate';
12+
import { isDefined } from '../utils/utils';
1213

1314
// read the package.json file and get the @derockdev/discord-components-core version
1415
let discordComponentsVersion = '^3.6.1';
@@ -39,18 +40,19 @@ export type RenderMessageContext = {
3940

4041
export default async function renderMessages({ messages, channel, callbacks, ...options }: RenderMessageContext) {
4142
const profiles = buildProfiles(messages);
42-
const chatBody: React.ReactElement[] = [];
43-
44-
for (const message of messages) {
45-
const rendered = await renderMessage(message, {
46-
messages,
47-
channel,
48-
callbacks,
49-
...options,
50-
});
5143

52-
if (rendered) chatBody.push(rendered);
53-
}
44+
const chatBody = (
45+
await Promise.all(
46+
messages.map((message) =>
47+
renderMessage(message, {
48+
messages,
49+
channel,
50+
callbacks,
51+
...options,
52+
})
53+
)
54+
)
55+
).filter(isDefined);
5456

5557
const elements = (
5658
<DiscordMessages style={{ minHeight: '100vh' }}>

src/index.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ export async function generateFromMessages<T extends ExportReturnType = ExportRe
5555

5656
// get the time it took to render the messages
5757
// const renderTime = process.hrtime(startTime);
58-
// console.log(`[discord-html-transcripts] Rendered ${transformedMessages.length} messages in ${renderTime[0]}s ${renderTime[1] / 1000000}ms`);
58+
// console.log(
59+
// `[discord-html-transcripts] Rendered ${transformedMessages.length} messages in ${renderTime[0]}s ${
60+
// renderTime[1] / 1000000
61+
// }ms`
62+
// );
5963

6064
// return the html in the specified format
6165
if (options.returnType === ExportReturnType.Buffer) {

src/utils/utils.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import type { APIMessageComponentEmoji, Emoji } from 'discord.js';
22
import { request } from 'undici';
33
import twemoji from 'twemoji';
44

5+
export function isDefined<T>(value: T | undefined | null): value is T {
6+
return value !== undefined && value !== null;
7+
}
8+
59
export function formatBytes(bytes: number, decimals = 2) {
610
if (bytes === 0) return '0 Bytes';
711

0 commit comments

Comments
 (0)