perf(frontend): U48 i18n locale 懒加载 — en-US JSON 动态导入拆分为独立 chunk
问题: src/i18n/index.ts 静态导入 zh-CN.json (200KB compact) + en-US.json (292KB compact),两者共 486KB 全部内联到主 index chunk,致主 chunk 696KB 超过 Vite 600KB 警告阈值。 修复: - src/i18n/index.ts: 移除 en-US.json 静态导入,改为 ensureLocaleLoaded() 动态导入 + i18n.addResourceBundle() 按需加载 - zh-CN (默认/回退语言) 保持静态内联,无行为变化 - en-US 仅在用户切换英文时按需 fetch (290KB 独立 chunk) - 已选英文的用户刷新页面时异步加载 en-US (短暂中文闪烁,可接受) - src/store/index.ts: setLanguage 调用 ensureLocaleLoaded 确保目标语言包 加载完成后再切换 结果: - 主 index chunk: 696KB → 423KB (-39%, -273KB) - en-US chunk: 290KB 独立懒加载 (仅英文用户首次切换时 fetch) - Vite 600KB chunk 警告消除 - tsc -b=0, npm build✓ (18.18s), ESLint=0/43/any=0, go build=0 - 17/17 集成测试通过, Docker healthy
This commit is contained in:
1 parent
ca036a85ca
commit
8e211b64af
2 files changed
+35
-5
No files matched your search
@@ -29,9 +29,10 @@ export const useLanguageStore = create<LanguageState>()(
|
||||
(set) => ({
|
||||
language: "zh-CN" as AppLanguage,
|
||||
setLanguage: (lang) => {
|
||||
// 同步切换 i18next 实例
|
||||
// Ensure the target locale bundle is loaded (en-US is lazy) before switching.
|
||||
import("@/i18n")
|
||||
.then(({ default: i18n }) => {
|
||||
.then(async ({ default: i18n, ensureLocaleLoaded }) => {
|
||||
await ensureLocaleLoaded(lang);
|
||||
i18n.changeLanguage(lang);
|
||||
})
|
||||
.catch(() => {
|
||||
|
||||
Reference in new issue
Block a user