2021-05-10 10:00:52
Как уменьшить потребление памяти во время TypeScript компиляции?#typescript #nestjs
TL;DR Используйте skipLibCheck и понимайте import
В чате @nest_ru задали вопрос "Сталкнулся с такой проблемой, nest не может сбилдить проект внутри докера на слабой машине с 1gb памяти". По умолчанию Nest.js использует TypeScript для сборки. При неправильной конфигурации он может требовать больше 1GB памяти.
Расскажу об оптимизации из реального проекта с подобной проблемой. На каждом этапе оптимизации удалялся папка build как при сборке Docker-а потом запускалась команда tsc --diagnostics --project tsconfig.build.json, чтобы отследить метрики.
Начальное состояние:
Memory used: 1006023K Total time: 17.70s
Проверяем в tsconfig.json включенный флага skipLibCheck. Его нет, это типичная ошибка. После включения:
Memory used: 858580K Total time: 15.08s
Смотрим какие импорты библиотек можно упростить. Например, aws-sdk стоит 400Mb. На проекте она используется в одном файле. Делаем вот такой рефакторинг:
import KinesisVideo from 'aws-sdk/clients/kinesisvideo';
import KinesisVideoSignalingChannels from 'aws-sdk/clients/kinesisvideosignalingchannels';
import type { AWSError } from 'aws-sdk/lib/error';
// import { AWSError, KinesisVideo, KinesisVideoSignalingChannels } from 'aws-sdk';
Memory used: 432743K Total time: 9.67s
Таким образом мы сократили запуск затраты памяти в 2.3 раза и ускорили билд на 8 секунд.
483 views07:00