Скачать CV

Фронтенд

Vue SSR отдаёт одну локаль

Документ это английский, русский или немецкий. Не все три. Смена языка это новый URL, а не второй словарь в куче.

Этот сайт это Vue SSR, не SPA. Первый HTML должен быть той страницей, которую видят и краулер, и посетитель. И он должен совпадать с локалью в URL. Старый entry на каждый рендер импортировал en, ru и de, потом выбирал одну. Node держал две другие в изоляте. Сериализованное состояние повторяло те же три словаря, чтобы клиент менял язык без навигации.

Язык без навигации никто не менял. Лишний JSON лежал в документе и в куче. Контейнер vue после тихого утра сидел около 700 МБ.

Одна локаль запроса. Одна таблица сообщений. Два других файла остаются на диске.
Одна локаль запроса. Одна таблица сообщений. Два других файла остаются на диске.

Что entry грузит сейчас

SSR-сервер грузит сообщения только локали запроса. Клиент гидрирует эту таблицу. Смена языка бьёт в новый URL и новый документ. Так роутер уже работает с en, ru и de.

Форматированные даты попадают в сериализованное состояние. Клиент не считает их на mount. Это убрало hydration warning и расхождение локали сразу. Статические области, которые не слушают i18n, остаются только серверными.

Клиент гидрирует те же строки, что напечатал сервер. Смена языка это навигация.
Клиент гидрирует те же строки, что напечатал сервер. Смена языка это навигация.

За чем следить

Пропущенный ключ сообщения теперь падает в одной локали, не в трёх. Сиды по-прежнему несут все три языка, поэтому форма, которая сохраняет только активную локаль, всё ещё баг. Процесс vue перезапускается по потолку памяти, та же идея, что pm.max_requests у PHP-FPM.

Куча на прогретом воркере села около 180 МБ. Из первого HTML ушли словари, которые не нужны. Страница выглядит так же. Она просто перестала возить два языка, которые никто не просил.

К новостям