Performance: Language switching UI
MEDIUM IMPACT
This affects page load speed and interaction responsiveness when switching languages on a website.
import { useRouter } from 'next/router'; import { useTransition } from 'react'; export default function LanguageSwitcher() { const router = useRouter(); const [isPending, startTransition] = useTransition(); const changeLanguage = (lang) => { startTransition(() => { router.push(router.pathname, router.asPath, { locale: lang, shallow: true }); }); }; return ( <select onChange={e => changeLanguage(e.target.value)} aria-label="Select language" disabled={isPending}> <option value="en">English</option> <option value="fr">French</option> <option value="es">Spanish</option> </select> ); }
import { useRouter } from 'next/router'; export default function LanguageSwitcher() { const router = useRouter(); const changeLanguage = (lang) => { router.push(router.pathname, router.asPath, { locale: lang }); }; return ( <select onChange={e => changeLanguage(e.target.value)} aria-label="Select language"> <option value="en">English</option> <option value="fr">French</option> <option value="es">Spanish</option> </select> ); }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Full page navigation on language change | High (full DOM rebuild) | Multiple reflows | High paint cost | [X] Bad |
| Shallow routing with React startTransition | Low (partial DOM update) | Single reflow | Low paint cost | [OK] Good |
| Loading all languages upfront | N/A | N/A | High JS bundle size | [X] Bad |
| Dynamic import of language data | N/A | N/A | Reduced JS bundle size | [OK] Good |