Параллельная обработка

Lingo.dev CLI поддерживает параллельную обработку с помощью команды run, которая позволяет одновременно выполнять несколько задач локализации и значительно сокращает время перевода для крупных проектов.

Команда run заменяет устаревшую команду i18n, обеспечивая ту же функциональность, но с заметным приростом производительности за счёт параллельной обработки.

Базовое использование

Обработка всех переводов с параллельной обработкой:

npx lingo.dev@latest run

Управление уровнем параллелизма:

npx lingo.dev@latest run --concurrency 20

Команда run использует ту же конфигурацию i18n.json и файлы i18n.lock, что и команда i18n.

Как работает параллельная обработка

Lingo.dev CLI распределяет задачи локализации между несколькими параллельными воркерами, обрабатывая разные языковые пары и шаблоны файлов одновременно.

Обзор архитектуры:

  1. Создание задач — CLI анализирует вашу конфигурацию и создаёт отдельные задачи для каждой комбинации локали и файла
  2. Распределение воркеров — задачи распределяются между несколькими рабочими процессами
  3. Параллельная обработка — воркеры обрабатывают переводы одновременно, предотвращая конфликты файлов
  4. Агрегация результатов — готовые переводы безопасно записываются в целевые файлы

Управление параллелизмом

Задать количество воркеров:

npx lingo.dev@latest run --concurrency 15

По умолчанию используется 10 воркеров. Чем больше значение, тем быстрее обрабатываются переводы, но тем больше ресурсов системы потребуется, и возможны ограничения по API.

Оптимальный уровень параллелизма зависит от возможностей вашей системы и лимитов провайдера переводов. Начните со значения по умолчанию и корректируйте в зависимости от производительности.

Таргетированная обработка

Обработка определённых языков:

npx lingo.dev@latest run --target-locale es --target-locale fr

Обработка определённых типов файлов:

npx lingo.dev@latest run --bucket json

Обработка определённых файлов:

npx lingo.dev@latest run --file components/header

Обработка определённых ключей:

npx lingo.dev@latest run --key welcome.title

Поддерживаются glob-шаблоны, как в библиотеке minimatch.

Принудительный перевод заново:

npx lingo.dev@latest run --force

Совет: Чтобы получить лучший результат при повторном переводе, сначала удалите переводы с помощью команды purge, а затем запустите команду run без --force. Такой подход использует встроенный механизм кэширования для более эффективного повторного перевода.

Эти параметры таргетинга работают так же, как команда i18n, но задачи обрабатываются параллельно.

Предотвращение гонки данных

Lingo.dev CLI защищает файлы от повреждения при параллельной обработке с помощью нескольких механизмов безопасности:

Синхронизация I/O — Операции с файловой системой синхронизируются, чтобы несколько воркеров не писали в один и тот же файл одновременно.

Защита lockfile — Файл i18n.lock использует атомарные операции для предотвращения повреждения при одновременных обновлениях.

Транзакционная обработка — Каждая задача либо полностью завершается, либо чисто откатывается, чтобы файлы всегда оставались в корректном состоянии.

Оптимизация производительности

Следите за системными ресурсами при использовании высокой степени параллелизма. CLI оптимизирован для эффективности, но для очень больших проектов может понадобиться мониторинг ресурсов.

Начинайте с дефолтных настроек:

npx lingo.dev@latest run
# Uses optimized concurrency settings

Постепенно увеличивайте масштаб:

npx lingo.dev@latest run --concurrency 20
# Increase if system handles load well

Таргетируйте конкретный контент для итераций:

npx lingo.dev@latest run --file src/components
# Process only changed components

Совместимость

Команда run полностью совместима с текущими конфигами:

  • Тот же формат i18n.json — не требуется менять конфигурацию
  • То же поведение i18n.lock — инкрементальное отслеживание перевода работает так же
  • Те же форматы файлов — поддерживаются все типы bucket'ов
  • Те же параметры таргетинга — флаги --bucket, --key, --file, --force работают одинаково
  • Указание локалей через опции:
    • --target-locale для переопределения locale.targets из конфига i18n.json (Примечание: Заменяет опцию --locale для команды i18n.)
    • --source-locale для переопределения locale.source из конфига i18n.json

Миграция с команды i18n:

# Current command
npx lingo.dev@latest i18n

# Parallel equivalent
npx lingo.dev@latest run

Вся функциональность полностью сохраняется, а производительность значительно увеличивается.

Опция --locale заменена отдельными опциями --target-locale и --source-locale.

Архитектура пула воркеров

Lingo.dev CLI использует продвинутую систему пула воркеров:

Динамическое распределение — воркеры создаются в зависимости от ресурсов системы и настроек параллельности.

Распределение задач — задачи равномерно распределяются между воркерами с помощью оптимизированных алгоритмов.

Отслеживание прогресса — мониторинг выполнения всех параллельных операций в реальном времени.

Управление ресурсами — автоматическая очистка и освобождение ресурсов после завершения обработки.

Автоматическое кэширование — при использовании Lingo.dev API для переводов большие файлы локалей разбиваются на части. Файлы целевых локалей постепенно заполняются переводами по мере получения каждой части от API. Если процесс прерывается, вы можете продолжить перевод с того места, где остановились.