Currently, creating a Language on an empty l10n cache is very slow (unless manualRecache is set).
> $t1 = microtime( true ); mws()->getLanguageFactory()->getLanguage( 'he' ); $t2 = microtime( true ); echo ( $t2 - $t1 ) . PHP_EOL; 1.6950080394745
This is because in order to construct a Language, the LanguageFactory needs the language’s fallback chain (e.g. creating the arz language must fall back to the LanguageAr class in order to get its normalize() implementation), and the language fallback chain comes from the l10n cache; as soon as the LanguageFactory accesses it, LocalisationCache gets busy fully populating the l10n cache for the language, including loading all the message files. I think we can substantially speed this up by not requiring the l10n cache to be built until necessary (the fallback chain, in particular, should not require loading any extension files).