From 7cfa839e1cac376b2fc5619e5904fcf224b3306f Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 24 Dec 2023 22:49:23 +0800 Subject: [PATCH] Perf fixes --- src/components/relative-time.jsx | 44 ++++++++++---------------------- src/utils/nice-date-time.js | 26 ++++++++++++++----- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/src/components/relative-time.jsx b/src/components/relative-time.jsx index 60d8147..37e8156 100644 --- a/src/components/relative-time.jsx +++ b/src/components/relative-time.jsx @@ -8,7 +8,6 @@ import dayjs from 'dayjs'; import dayjsTwitter from 'dayjs-twitter'; import localizedFormat from 'dayjs/plugin/localizedFormat'; import relativeTime from 'dayjs/plugin/relativeTime'; -import { useEffect, useState } from 'preact/hooks'; dayjs.extend(dayjsTwitter); dayjs.extend(localizedFormat); @@ -19,36 +18,19 @@ const dtf = new Intl.DateTimeFormat(); export default function RelativeTime({ datetime, format }) { if (!datetime) return null; const date = dayjs(datetime); - const [dateStr, setDateStr] = useState(''); - - useEffect(() => { - let timer, raf; - const update = () => { - raf = requestAnimationFrame(() => { - let str; - if (format === 'micro') { - // If date <= 1 day ago or day is within this year - const now = dayjs(); - const dayDiff = now.diff(date, 'day'); - if (dayDiff <= 1 || now.year() === date.year()) { - str = date.twitter(); - } else { - str = dtf.format(date.toDate()); - } - } else { - str = date.fromNow(); - } - setDateStr(str); - - timer = setTimeout(update, 30_000); - }); - }; - raf = requestAnimationFrame(update); - return () => { - clearTimeout(timer); - cancelAnimationFrame(raf); - }; - }, [date]); + let dateStr; + if (format === 'micro') { + // If date <= 1 day ago or day is within this year + const now = dayjs(); + const dayDiff = now.diff(date, 'day'); + if (dayDiff <= 1 || now.year() === date.year()) { + dateStr = date.twitter(); + } else { + dateStr = dtf.format(date.toDate()); + } + } else { + dateStr = date.fromNow(); + } return (