/** * main.js * * 精简启动流水线:快速挂载 Vue app,重型依赖(Sentry/Clarity)异步加载 */ // 核心插件(Vuetify / Router / Pinia) import { registerPlugins } from '@/plugins' // Components import App from './App.vue' import GlobalMessage from '@/components/GlobalMessage.vue' // Composables import { createApp } from 'vue' import messageService from './utils/message' const app = createApp(App) registerPlugins(app) app.use(messageService) app.component('GlobalMessage', GlobalMessage) // 挂载 Vue app(首要目标:尽快渲染首屏) app.mount('#app') // ====== 以下全部异步,不阻塞首屏渲染 ====== // 异步初始化 Sentry(延迟到首帧渲染完成后,防止 errorHandler 与渲染周期冲突) setTimeout(() => { import('./utils/sentry').then(({ initSentry }) => { const router = app.config.globalProperties.$router initSentry(app, router) }).catch((err) => { console.warn('Sentry 初始化失败:', err) }) }, 1000) // 异步加载 Clarity(在页面完全加载后) const loadClarity = async () => { try { const { getVisitorId } = await import('./utils/visitorId') const Clarity = (await import('@microsoft/clarity')).default Clarity.init('rhp8uqoc3l') const visitorId = await getVisitorId() console.log('Visitor ID:', visitorId) Clarity.identify(visitorId) Clarity.setTag('fingerprintjs', visitorId) } catch (error) { console.warn('Clarity 加载或标识设置失败:', error) } } if (document.readyState === 'complete') { loadClarity() } else { window.addEventListener('load', loadClarity, { once: true }) }