From 385ffafc673c9d2265e8dd151db06a3c5e9cac4a Mon Sep 17 00:00:00 2001 From: Tunglies Date: Sat, 18 Oct 2025 22:49:55 +0800 Subject: [PATCH] fix: WindowProvider awful performance (#5119) --- src/providers/window/WindowProvider.tsx | 17 +++++++---------- src/providers/window/index.ts | 5 +++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/providers/window/WindowProvider.tsx b/src/providers/window/WindowProvider.tsx index ef7d4590..ec0d10ca 100644 --- a/src/providers/window/WindowProvider.tsx +++ b/src/providers/window/WindowProvider.tsx @@ -1,6 +1,8 @@ import { getCurrentWindow } from "@tauri-apps/api/window"; import React, { useCallback, useEffect, useMemo, useState } from "react"; +import debounce from "@/utils/debounce"; + import { WindowContext } from "./WindowContext"; export const WindowProvider: React.FC<{ children: React.ReactNode }> = ({ @@ -14,19 +16,14 @@ export const WindowProvider: React.FC<{ children: React.ReactNode }> = ({ const minimize = useCallback(() => currentWindow.minimize(), [currentWindow]); useEffect(() => { - let active = true; - - const updateMaximized = async () => { + const checkMaximized = debounce(async () => { const value = await currentWindow.isMaximized(); - if (!active) return; - setMaximized((prev) => (prev === value ? prev : value)); - }; + setMaximized(value); + }, 300); - updateMaximized(); - const unlistenPromise = currentWindow.onResized(updateMaximized); + const unlistenPromise = currentWindow.onResized(checkMaximized); return () => { - active = false; unlistenPromise.then((unlisten) => unlisten()); }; }, [currentWindow]); @@ -47,7 +44,7 @@ export const WindowProvider: React.FC<{ children: React.ReactNode }> = ({ const refreshDecorated = useCallback(async () => { const val = await currentWindow.isDecorated(); - setDecorated((prev) => (prev === val ? prev : val)); + setDecorated(val); return val; }, [currentWindow]); diff --git a/src/providers/window/index.ts b/src/providers/window/index.ts index 8142a5ef..609d6540 100644 --- a/src/providers/window/index.ts +++ b/src/providers/window/index.ts @@ -1,2 +1,3 @@ -export * from "./WindowContext"; -export * from "./WindowProvider"; +export { WindowContext } from "./WindowContext"; +export type { WindowContextType } from "./WindowContext"; +export { WindowProvider } from "./WindowProvider";