1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-03 20:46:20 +02:00

perf(frontend): 低精度な現在時刻を一か所で管理するように (#16479)

* perf(frontend): 低精度な現在時刻を一か所で管理するように

* lint

* fix

* remove unused imports

* fix

* Update Changelog

* [ci skip] typo

* enhance: カレンダーウィジェットの日付変更は時間通りに行うように

* [ci skip] fix
This commit is contained in:
かっこかり
2025-09-12 17:12:50 +09:00
committed by GitHub
parent f60b6291d7
commit aebc3f781e
5 changed files with 90 additions and 52 deletions

View File

@@ -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);