Хобрук: Ваш путь к мастерству в программировании

Почему Live Reload медленная для приложения Angular в Docker?

Я использую бэкэнд Rails с интерфейсом Angular внутри образа Docker. Хост-компьютер работает под управлением OSX.

Службы работают нормально, когда я запускаю docker-compose up --build, но любые изменения в файлах внешнего интерфейса занимают почти час, чтобы вызвать горячую перезагрузку.

Если я запускаю процесс сборки вручную в сеансе bash для контейнера ng (ng build --aot), это занимает около 2 минут. Не оптимально, но лучше, чем час. Тот же самый процесс сборки занимает намного больше времени, когда он является частью горячей перезагрузки. Я не уверен, почему.

Я попробовал решение, упомянутое здесь, об открытии порта для горячей перезагрузки веб-пакета. и добавив номер порта внутри docker-compose.yml, но я не увидел разницы в поведении.

Часть Rails работает нормально. Изменение файла почти сразу заметно в контейнере.

Но для контейнера ng все не так быстро. Каталог node_modules исключен из моего образа Docker, поэтому при сборке Docker он заполняет свой собственный каталог node_modules внутри образа. Это должно означать, что нет проблем с синхронизацией модулей узла на хост-компьютере с тем, что находится в образе.

Я провел некоторое исследование, и похоже, что есть возможность запустить ng eject, что позволит мне настроить конфигурацию веб-пакета. Есть несколько предложений по изменению конфигурации для ускорения работы, например. вот этот. Однако, учитывая, что опция извлечения не поддерживается в ng 6, я бы предпочел не идти по этому пути.

Любые идеи о том, как я могу ускорить время компиляции для этого приложения ng?


Ответы:


1

Этот комментарий к проблеме AngularCLI "ng serve не обнаруживает файл изменения» решили проблему.

Обновление файла tsconfig.json, чтобы он автоматически исключал каталог node_modules, значительно ускорило работу веб-пакета.

Мне все еще любопытно, почему это было проблемой в Debian Jessie, а не в OSX. Если кто знает причину, я весь внимание.

09.08.2018
  • Вы запускали Docker через OSX с исходным кодом, смонтированным в томе? Объемная производительность повлияет на скорость, в то время как работа в Mac OS не будет связана с накладными расходами на синхронизацию файлов. 09.08.2018
  • Я думал об этом. Но если бы это была проблема синхронизации файлов, я бы ожидал, что приложение Rails будет страдать от такой же задержки. Странно, что это затронуло только приложение Angular. Кроме того, образ Docker запускает собственную установку npm и не знает о каталоге node_modules хост-компьютера (он был добавлен в файл .dockerignore). Таким образом, ничего из этого каталога не синхронизируется между хост-компьютером и образом Docker. 09.08.2018
  • Dockerignore используется только при создании образов. Вы использовали готовый образ и монтировали том или создавали свой собственный? Меня это зацепило! 09.08.2018
  • Я создавал свой имидж. У меня была строка в Dockerfile, где я добавлял все в корневой каталог репозитория, но я предположил, что, поскольку я игнорировал через файл dockerignore, он также будет игнорироваться во время работы контейнеров. Но вы говорите, что файл dockerignore игнорируется после запуска контейнеров. Это правильно? 10.08.2018
  • Если вы объявите том при запуске своего контейнера или через docker-compose, я полагаю, что тогда .dockerignore будет игнорироваться. 10.08.2018
  • Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..