diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-09-12 17:12:50 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-12 17:12:50 +0900 |
| commit | aebc3f781e32c40faf2ee7fa5a23042e6382ce2e (patch) | |
| tree | 6b92541ce8bedc69f824c8d119600b4c3ceba6b7 /packages/frontend/src/composables | |
| parent | chore(gh): add frontend-builder to renovate (diff) | |
| download | misskey-aebc3f781e32c40faf2ee7fa5a23042e6382ce2e.tar.gz misskey-aebc3f781e32c40faf2ee7fa5a23042e6382ce2e.tar.bz2 misskey-aebc3f781e32c40faf2ee7fa5a23042e6382ce2e.zip | |
perf(frontend): 低精度な現在時刻を一か所で管理するように (#16479)
* perf(frontend): 低精度な現在時刻を一か所で管理するように
* lint
* fix
* remove unused imports
* fix
* Update Changelog
* [ci skip] typo
* enhance: カレンダーウィジェットの日付変更は時間通りに行うように
* [ci skip] fix
Diffstat (limited to 'packages/frontend/src/composables')
| -rw-r--r-- | packages/frontend/src/composables/use-lowres-time.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/packages/frontend/src/composables/use-lowres-time.ts b/packages/frontend/src/composables/use-lowres-time.ts new file mode 100644 index 0000000000..3c5b561f51 --- /dev/null +++ b/packages/frontend/src/composables/use-lowres-time.ts @@ -0,0 +1,34 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { ref, readonly, computed } from 'vue'; + +const time = ref(Date.now()); + +export const TIME_UPDATE_INTERVAL = 10000; // 10秒 + +/** + * 精度が求められないが定期的に更新しないといけない時計で使用(10秒に一度更新)。 + * tickを各コンポーネントで行うのではなく、ここで一括して行うことでパフォーマンスを改善する。 + * + * ※ マウント前の時刻を返す可能性があるため、通常は`useLowresTime`を使用する +*/ +export const lowresTime = readonly(time); + +/** + * 精度が求められないが定期的に更新しないといけない時計で使用(10秒に一度更新)。 + * tickを各コンポーネントで行うのではなく、ここで一括して行うことでパフォーマンスを改善する。 + * + * 必ず現在時刻以降を返すことを保証するコンポーサブル + */ +export function useLowresTime() { + // lowresTime自体はマウント前の時刻を返す可能性があるため、必ず現在時刻以降を返すことを保証する + const now = Date.now(); + return computed(() => Math.max(time.value, now)); +} + +window.setInterval(() => { + time.value = Date.now(); +}, TIME_UPDATE_INTERVAL); |