perf: move the 19 non-zh/en dictionaries into a lazy locale chunk
The core client bundle statically imported every third-language dictionary (ja/de/fr/…/zh-HK/MO/TW, ~640KB of source — roughly half the bundle's weight) for a code path most sessions never enter: the sidebar's own t() only consults zh/en plus the better-locale override store, and the dicts' ONLY consumer is that store's register() call. They now ride the existing lazy-chunk machinery as lib/client-locale.js (fetched from /sidebar/bundle only when better-locale is actually installed; a generation counter keeps the async registration moot when the integration effect re-runs or disposes mid-flight). Until the chunk lands, t() keeps the zh/en chain; the store's own revision bump on register re-renders the chrome once the dicts arrive. Core client.js: 1.46MB → 822KB (-44%). The chunk-boundary key-set check moves to the existing runtime test (every shipped dict stays key-set-equal to zh).
This commit is contained in:
+7
-43
@@ -845,49 +845,13 @@ export const en: Record<keyof typeof zh, string> = {
|
||||
*/
|
||||
export const LOCALE_NS = 'betterSidebar'
|
||||
|
||||
// The ja dictionary lives in a sibling file (326 keys) so this module
|
||||
// stays readable. Type-checked against the zh key set: a missing or extra
|
||||
// ja key is a compile error.
|
||||
import { ja as jaDict } from './locales-ja.ts'
|
||||
import { de as deDict } from './locales-de.ts'
|
||||
import { fr as frDict } from './locales-fr.ts'
|
||||
import { pt as ptDict } from './locales-pt.ts'
|
||||
import { ko as koDict } from './locales-ko.ts'
|
||||
import { ar as arDict } from './locales-ar.ts'
|
||||
import { hi as hiDict } from './locales-hi.ts'
|
||||
import { id as idDict } from './locales-id.ts'
|
||||
import { tr as trDict } from './locales-tr.ts'
|
||||
import { vi as viDict } from './locales-vi.ts'
|
||||
import { th as thDict } from './locales-th.ts'
|
||||
import { ru as ruDict } from './locales-ru.ts'
|
||||
import { it as itDict } from './locales-it.ts'
|
||||
import { nl as nlDict } from './locales-nl.ts'
|
||||
import { sv as svDict } from './locales-sv.ts'
|
||||
import { pl as plDict } from './locales-pl.ts'
|
||||
import { zhHK as zhHKDict } from './locales-zh-HK.ts'
|
||||
import { zhTW as zhTWDict } from './locales-zh-TW.ts'
|
||||
import { zhMO as zhMODict } from './locales-zh-MO.ts'
|
||||
|
||||
/** The ja dictionary (key-set-equal to zh, enforced by the type annotation). */
|
||||
export const ja: Record<keyof typeof zh, string> = jaDict as Record<keyof typeof zh, string>
|
||||
export const de: Record<keyof typeof zh, string> = deDict as Record<keyof typeof zh, string>
|
||||
export const fr: Record<keyof typeof zh, string> = frDict as Record<keyof typeof zh, string>
|
||||
export const pt: Record<keyof typeof zh, string> = ptDict as Record<keyof typeof zh, string>
|
||||
export const ko: Record<keyof typeof zh, string> = koDict as Record<keyof typeof zh, string>
|
||||
export const ar: Record<keyof typeof zh, string> = arDict as Record<keyof typeof zh, string>
|
||||
export const hi: Record<keyof typeof zh, string> = hiDict as Record<keyof typeof zh, string>
|
||||
export const id: Record<keyof typeof zh, string> = idDict as Record<keyof typeof zh, string>
|
||||
export const tr: Record<keyof typeof zh, string> = trDict as Record<keyof typeof zh, string>
|
||||
export const vi: Record<keyof typeof zh, string> = viDict as Record<keyof typeof zh, string>
|
||||
export const th: Record<keyof typeof zh, string> = thDict as Record<keyof typeof zh, string>
|
||||
export const ru: Record<keyof typeof zh, string> = ruDict as Record<keyof typeof zh, string>
|
||||
export const it: Record<keyof typeof zh, string> = itDict as Record<keyof typeof zh, string>
|
||||
export const nl: Record<keyof typeof zh, string> = nlDict as Record<keyof typeof zh, string>
|
||||
export const sv: Record<keyof typeof zh, string> = svDict as Record<keyof typeof zh, string>
|
||||
export const pl: Record<keyof typeof zh, string> = plDict as Record<keyof typeof zh, string>
|
||||
export const zhHK: Record<keyof typeof zh, string> = zhHKDict as Record<keyof typeof zh, string>
|
||||
export const zhTW: Record<keyof typeof zh, string> = zhTWDict as Record<keyof typeof zh, string>
|
||||
export const zhMO: Record<keyof typeof zh, string> = zhMODict as Record<keyof typeof zh, string>
|
||||
// The 19 non-zh/en dictionaries live in the LAZY `locale` chunk
|
||||
// (src/client/chunks/locale.tsx → lib/client-locale.js): `t()` only ever
|
||||
// consults zh/en plus the better-locale override store, so those dicts are
|
||||
// needed only when better-locale is installed — the client apply fetches the
|
||||
// chunk there and registers its `localeDicts` into the override store. They
|
||||
// used to sit statically in the core bundle (≈ half its weight) for a code
|
||||
// path most sessions never enter.
|
||||
|
||||
/** The DSH locale service attached by the client apply (absent → browser detection). */
|
||||
let localeService: { getSnapshot(): { active: string } } | undefined
|
||||
|
||||
Reference in New Issue
Block a user