Compare commits

..

2 Commits

Author SHA1 Message Date
Memory
01b5ed1a8f
style: update Chip styles 2026-02-04 10:43:33 +08:00
Memory
4bfa02023c
perf: improve core startup performance 2026-02-04 10:20:59 +08:00
5 changed files with 83 additions and 47 deletions

View File

@ -160,7 +160,9 @@ async function prepareCore(detached: boolean, skipStop = false): Promise<CoreCon
}
// 管理 Smart 内核覆写配置
await manageSmartOverride()
if (core === 'mihomo-smart') {
await manageSmartOverride()
}
// generateProfile 返回实际使用的 current
const current = await generateProfile()

View File

@ -9,7 +9,7 @@ const execPromise = promisify(exec)
// 常量
const CORE_READY_MAX_RETRIES = 30
const CORE_READY_RETRY_INTERVAL_MS = 500
const CORE_READY_RETRY_INTERVAL_MS = 100
export async function cleanupSocketFile(): Promise<void> {
if (process.platform === 'win32') {

View File

@ -128,9 +128,7 @@ app.on('open-url', async (_event, url) => {
await handleDeepLink(url)
})
app.whenReady().then(async () => {
electronApp.setAppUserModelId('party.mihomo.app')
const initPromise = (async () => {
await initBasic()
await checkHighPrivilegeCoreEarly()
await initAdminStatus()
@ -144,52 +142,80 @@ app.whenReady().then(async () => {
appConfig.language = systemLanguage
}
await initI18n({ lng: appConfig.language })
return appConfig
} catch (e) {
safeShowErrorBox('common.error.initFailed', `${e}`)
app.quit()
throw e
}
})()
try {
initCoreWatcher()
const startPromises = await startCore()
if (startPromises.length > 0) {
startPromises[0].then(async () => {
await initProfileUpdater()
await initWebdavBackupScheduler()
await checkAdminRestartForTun()
})
}
} catch (e) {
safeShowErrorBox('mihomo.error.coreStartFailed', `${e}`)
}
app.whenReady().then(async () => {
electronApp.setAppUserModelId('party.mihomo.app')
try {
await startMonitor()
} catch {
// ignore
}
const appConfig = await initPromise
app.on('browser-window-created', (_, window) => {
optimizer.watchWindowShortcuts(window)
})
const { showFloatingWindow: showFloating = false, disableTray = false } = await getAppConfig()
registerIpcMainHandlers()
await createWindow()
const createWindowPromise = createWindow()
let coreStarted = false
const coreStartPromise = (async (): Promise<void> => {
try {
initCoreWatcher()
const startPromises = await startCore()
if (startPromises.length > 0) {
startPromises[0].then(async () => {
await initProfileUpdater()
await initWebdavBackupScheduler()
await checkAdminRestartForTun()
})
}
coreStarted = true
} catch (e) {
safeShowErrorBox('mihomo.error.coreStartFailed', `${e}`)
}
})()
const monitorPromise = (async (): Promise<void> => {
try {
await startMonitor()
} catch {
// ignore
}
})()
await createWindowPromise
const { showFloatingWindow: showFloating = false, disableTray = false } = appConfig
const uiTasks: Promise<void>[] = [initShortcut()]
if (showFloating) {
try {
await showFloatingWindow()
} catch (error) {
await logger.error('Failed to create floating window on startup', error)
}
uiTasks.push(
(async () => {
try {
await showFloatingWindow()
} catch (error) {
await logger.error('Failed to create floating window on startup', error)
}
})()
)
}
if (!disableTray) {
await createTray()
uiTasks.push(createTray())
}
await initShortcut()
await Promise.all(uiTasks)
await Promise.all([coreStartPromise, monitorPromise])
if (coreStarted) {
mainWindow?.webContents.send('core-started')
}
app.on('activate', () => {
showMainWindow()

View File

@ -165,7 +165,7 @@ async function killOldMihomoProcesses(): Promise<void> {
}
}
await new Promise((resolve) => setTimeout(resolve, 500))
await new Promise((resolve) => setTimeout(resolve, 200))
} catch {
// 忽略错误
}
@ -389,19 +389,27 @@ export async function initBasic(): Promise<void> {
}
export async function init(): Promise<void> {
await startSubStoreFrontendServer()
await startSubStoreBackendServer()
const { sysProxy } = await getAppConfig()
try {
if (sysProxy.enable) {
await startPacServer()
}
await triggerSysProxy(sysProxy.enable)
} catch {
// ignore
}
await startSSIDCheck()
const initTasks: Promise<void>[] = [
startSubStoreFrontendServer(),
startSubStoreBackendServer(),
startSSIDCheck()
]
initTasks.push(
(async (): Promise<void> => {
try {
if (sysProxy.enable) {
await startPacServer()
}
await triggerSysProxy(sysProxy.enable)
} catch {
// ignore
}
})()
)
await Promise.all(initTasks)
initDeeplink()
}

View File

@ -58,10 +58,10 @@ const RuleItem: React.FC<RuleItemProps> = (props) => {
{payload}
</div>
<div className="flex items-center gap-2">
<Chip size="sm" variant="flat" color="default" className="text-xs">
<Chip size="sm" radius="sm" variant="bordered" className="text-xs">
{type}
</Chip>
<Chip size="sm" variant="flat" color="default" className="text-xs">
<Chip size="sm" radius="sm" variant="bordered" className="text-xs">
{proxy}
</Chip>
</div>