From 842e86cd4c513c6fb15b81604662b7aa5693c0fe Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Tue, 9 Nov 2021 21:21:33 +0300 Subject: [PATCH] [Perf] Message List: Avoid `toLocaleTimeString` because of bad performance --- src/components/middle/composer/Composer.tsx | 2 +- src/util/dateFormat.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/middle/composer/Composer.tsx b/src/components/middle/composer/Composer.tsx index 410083a54..7b137e631 100644 --- a/src/components/middle/composer/Composer.tsx +++ b/src/components/middle/composer/Composer.tsx @@ -409,7 +409,7 @@ const Composer: FC = ({ closeEmojiTooltip(); if (IS_SINGLE_COLUMN_LAYOUT) { - // @perf + // @optimization setTimeout(() => closeSymbolMenu(), SENDING_ANIMATION_DURATION); } else { closeSymbolMenu(); diff --git a/src/util/dateFormat.ts b/src/util/dateFormat.ts index ad7af402b..47e37437c 100644 --- a/src/util/dateFormat.ts +++ b/src/util/dateFormat.ts @@ -31,17 +31,19 @@ function toIsoString(date: Date) { return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`; } +// @optimization `toLocaleTimeString` is avoided because of bad performance export function formatTime(datetime: number | Date, lang: LangFn) { const date = typeof datetime === 'number' ? new Date(datetime) : datetime; const timeFormat = lang.timeFormat || '24h'; - const time = date.toLocaleTimeString(lang.code, { - hour12: timeFormat === '12h', - hour: timeFormat === '12h' ? 'numeric' : '2-digit', - minute: '2-digit', - }); + let hours = date.getHours(); + let marker = ''; + if (timeFormat === '12h') { + marker = hours >= 12 ? ' PM' : ' AM'; + hours %= 12; + } - return timeFormat === '12h' ? time.replace(/^0:/, '12:') : time.replace('24:', '00:'); + return `${String(hours).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}${marker}`; } export function formatPastTimeShort(lang: LangFn, datetime: number | Date) {