В этой статье обсуждается применение микрофронтендов в ByteDance, а содержание в основном анализирует конкретные этапы реализации микрофронтендов и их использование за последние два года. Аналитическая часть в основном говорит о некоторых практических проблемах и нашем ответе, а ситуация приземления подчеркивает процесс реализации. В частности, мы упомянули множество краеугольных камней микро-фронтенда, которые должны быть предусмотрены в нашей концепции, эти аспекты являются почти необходимыми и предпосылками для использования микро-фронтендов в качестве инфраструктуры.
Традиционные интерфейсные службы обычно интегрируются на сайт по бизнес-направлениям, но по мере увеличения сложности бизнеса объем пакета быстро становится слишком большим. Чтобы приспособиться к этому изменению, часто требуется больше разработчиков и более детальная организация команды. При групповой разработке каждый модуль разделяется и дорабатывается отдельно, а при запуске они объединяются для совместной работы, что приводит к бесконечным слияниям веток и откатам кода, что приведет к резкому падению эффективности сотрудничества. Это именно та проблема, с которой Toutiaohao столкнулся за 17 лет.
Чрезмерные наборы кодов также приведут к частым выпускам.Каждая бизнес-ветвь и функциональная точка имеют определенную частоту обновления.Если традиционная монолитная система разработана, проверена и запущена, каждый бизнес будет иметь проект, полностью обновленный, протестированный и запущенный.Он-лайн , сумма частот выпуска будет очень высокой и очень частой. Если оригинальную муфту не разблокировать, она полностью потеряет свою отзывчивость.
Сделав еще один шаг вперед, с такой высокой частотой запуска и скоростью итерации версий разработчикам чрезвычайно сложно отследить, какая версия соответствует какому изменению.
Интерфейсное решение микросервиса ByteDance было создано для решения вышеуказанных задач. После нескольких лет разработки он успешно поддерживает десятки внутренних и внешних систем.
фон проблемы
Проблемы с монолитом
Монолит - это значение камня. Обычный перевод вообще "монолитный": монолитное приложение. Эта концепция не популярна во фронтенде, и перевод монолита может лучше отражать то, что он имеет в виду. Целое здание (или что-то еще) вырезано из цельного каменного блока. Например, каменные львы. Это применение монолитов. При этом возникает много проблем в быстро меняющейся и итеративной области фронтенд-инжиниринга.
медленный онлайн
Одна из больших проблем с монолитными приложениями заключается в том, что они очень медленно публикуются. Типичная бизнес-ситуация ByteDance заключается в том, что для последнего подключения к Интернету требуется не менее 30 минут, и столько же времени требуется для подключения внешнего интерфейса. Конечно, это то, через что мы прошли в 17-м, и сохранение темпов сейчас, вероятно, замедлится, если мы не обновим наши технологии. Затем, в конце 2017 года, мы начали серьезную переработку и начали отчаянно использовать микроинтерфейс.
Исходный откат тоже 10 минут. Так что в то время он не был в сети несколько раз в день, и риск тоже был очень высок. Постепенно изменения приходится сдерживать, и это стало «в сети раз в несколько дней, несколько изменений за раз».
Я полагаю, что это также вопрос, который возникнет у подавляющего большинства слушателей. Особенно такая традиционная бэкэнд-инжиниринг. Все в порядке, веб-пакет, который вы понимаете.
Будет ли много онлайн и оффлайн? Бизнесов много-много, а сколько обновлений надо выпустить вместе.
Сложность понимания
Конечно, на этот раз это инженерная проблема. То, что требует большего внимания, на самом деле проблема структуры. Каждый сотрудничает с десятками проектов в один проект. Один из очень важных моментов в том, что делает инженерия, — это быть «понятным людям». Более низкая когнитивная стоимость приводит к более низкой вероятности совершения ошибок.
В принципе, для этих проектов необходимо поддерживать полностью последовательную организационную модель. Например, модель перегружена или истекает кровью? Конторллеры все вместе или вместе с вьюшками по роутеру ставятся? Это очень тривиальные примеры. На самом деле подобных глубинных проблем очень много.
Есть и другие проблемы, например, можно ли его найти при отладке. Дело не в том, что одно приложение не может работать, а просто в том, сколько энергии и дизайна было вложено в решение этой проблемы, и сколько энергии потребовалось, чтобы сохранить эту проблему со спецификацией дизайна от краха.
Эта категория — проблема кода самого монолитного приложения. «Если его разберут, этого больше не будет».
Рамка не регулируется
Действительно, с архитектурной точки зрения, как нужно разрабатывать сегодняшние front-end проекты и как они вообще делаются? Из последнего абзаца мы знаем, что большинство хороших архитекторов и инженеров решили многие из этих трудностей, и путь лежит через хороший архитектурный дизайн.
Тогда все мы знаем, что различных фреймворков и практик фронтенда на самом деле очень много. У фронтенд-инженеров есть псевдоним, я не знаю, слышали ли вы о них, он называется «инженер по установке npm», ха-ха, и «инженер по поиску на github».
Трудно сказать, возникла ли чрезвычайно сложная ситуация из-за каркаса или из-за способа изготовления каркаса. Но это вопрос, над которым стоит задуматься. Поэтому, если вы возьмете на себя и получите проект, не говорите об этом, просто изучите его. В любом случае, существующая структура, безусловно, хороша. Просто вы должны изучить его на некоторое время и использовать его правильно.
Микрофронтенды превосходят ByteDance
Здесь мы начинаем говорить о наших деталях, а именно об обнаружении сервисов, изоляции операций, согласованности среды и других архитектурных преимуществах.На самом деле, поговорив об этих вещах, вы можете обнаружить, что основной смысл того, о чем мы говорим, заключается в том, что именно это очень особенный, привычный Большие изменения возможны. Достижение такого отличительного плана - это не то, что каждый может сделать после беседы, согласиться и быть счастливым. Включая процесс, стоимость, риск и другие аспекты.
Работа «инженера» состоит не в том, чтобы доказать, что структура может существовать в теории, а в том, чтобы иметь процесс ее построения. Например, если взять химические связи, то можно рассчитать любые возможные молекулы и нарисовать человечка. Но как синтезировать, по какому пути сделать эту молекулу, какой путь самый быстрый и дешевый, вот возможности процесса. Обычно это работа инженера.
обнаружение службы
Что касается обнаружения сервисов, мы сначала поговорим о том, что он делает и как он работает во всей модели микросервиса. Затем во второй части рассказывается о том, какую проблему он решает, и подробнее о новых возможностях, которые он может предоставить. Мы придаем большое значение новым возможностям, потому что наше позиционирование - это не пожарная команда. Когда пожар потушен, задача выполнена. Есть много новых целей и много новых преимуществ, которые можно изучить и реализовать.
Наконец, поговорим о том, как реализовано биение байтов.
1. Принцип
«Обнаружение службы» означает, что после разделения исходной отдельной службы методы в проекте развертываются отдельно, и никто не может никого найти. Необходим единый реестр для проверки всех развертываний, предоставляющих услуги.
«Обнаружение» — это когда вы хотите получить доступ к микросервису, как вы его найдете.
Таким образом, есть две конфигурации.Одна типична для Netflix OSS.Сначала она получает служебный каталог на клиентской машине, а логика обработки находится в клиентском коде. Другой — обнаружение сервисов на стороне сервера, как в случае с AWS.
Сервисное обнаружение традиционных микросервисов больше похоже на замену вызовов функций, как передавать функции, развернутые в разных контейнерах, после демонтажа. Идеи микрофронтенда здесь очень похожи, но функции немного отличаются. В случае микросервисов он будет различать подписки, уведомления, запросы и публикации, а интерфейс может не использоваться или не использоваться, когда интерфейс запущен. Есть также некоторые вещи, такие как «один-к-одному» и «ко-многим», которые в основном являются вещами, которые не нужно учитывать внешнему интерфейсу.
В чем они совпадают, так это в том, что никто не знает друг друга.Как узнать, какие услуги существуют и кто их предоставляет? Поговорим о конкретных ситуациях сервисного обнаружения различных конфигураций и стоящей за ними сервисной регистрации.
Обнаружение клиентских службЭто означает, что клиент, то есть вызывающая служба, запрашивает зарегистрированный каталог, который содержит основную информацию обо всех службах и балансировке нагрузки, а затем решает, как с этим поступить и какую конкретную стратегию балансировки нагрузки использовать. Например, OSS от Netflix, сервис зарегистрирован в Netflix Eureka, и он бьется каждому клиенту. Клиент делает это сам, просто и интуитивно понятно.
Обнаружение службы на стороне сервераЧто-то вроде AWS Elastic LoadBalancer. Запрос клиента завершен, и сервер решает, как изменить прокси и балансировку нагрузки за вас.
регистрация службыОна делится на самостоятельную регистрацию и стороннюю регистрацию. Самостоятельная регистрация говорит сама за себя. Сторонняя регистрация — это механизм поддержания активности, который регулярно проверяет статус службы, чтобы помочь вам контролировать, следует ли повышать или понижать уровень.
В основном используем первый: client service discovery, то есть нужно запросить еще один список модулей. Ресурсы, представленные в этом списке, определяются в соответствии с сеансом пользователя и обладают богатыми динамическими возможностями. Затем клиент загружает ресурсы модуля в соответствии с различной информацией в этом списке.
2. Что это дает переднему концу?
Использование обнаружения служб для организации микроинтерфейсов не только делает сложный онлайн-процесс развязанным и быстрым, но также упрощает согласование демонтированных версий проекта для достижения большей стабильности и отладки. Это также дает много других преимуществ для проектирования переднего плана. Далее в основном рассказывается о двух наиболее важных из различных преимуществ.
Быстрый запускВ чем заключается концепция?Как уже было сказано ранее, в одном проекте выпускаются десятки бизнесов.Как часто можно выпускать такие релизы? Практическое рассмотрение сценария после снятия ограничений обнаруживает неожиданно высокие уровни. Одним из наших микро-интерфейсных приложений является Toutiaohao, которое выпустило 2000 версий в первой половине 2019 года. Как упоминалось ранее, для завершения обновления пакета и перезапуска контейнера требуется 30 минут, а для завершения отката — 10 минут, что означает 1000 часов времени ожидания для онлайн и офлайн. Напротив, наш новый метод вступает в силу при отправке HTTP-запроса, что соответствует скорости ответа на уровне миллисекунд.
До того, как это было отложено, это не было вопросом медленности и необходимости ждать, поэтому все просто не отправляли это так. Все они следуют выпуску Native в стиле поезда. В результате оперативность реагирования сильно снизилась, а многие требования постепенно стали уже не узкими местами, вызванными разработкой, а всегда приходится ждать выхода версии.
Независимое переключениеИх мы сейчас будем распространять отдельно, а одностраничное приложение можно разделить на десятки модулей, каждый из которых вверх и вниз. И далее будет упомянуто, что вы можете настроить свою собственную бета-версию AB: 10 модулей могут генерировать 1024 комбинации версии AB, 20 модулей 1 миллион. Это совершенно невообразимо по сравнению с прошлым - то есть эпоха издательского дела вдвоём вообще не может этого сделать. Чего я сейчас не могу представить, так это того, что вы сказали, что AB-тестирование нельзя проводить в определенном бизнесе ByteDance.
Наша платформа Toutiaohao — это просто типичный проект микроинтерфейса, включающий в себя так много перечисленных модулей, каждый модуль имеет независимую версию и контроль сеанса над версией сервиса. Каждый модуль входит в список версий со всеми историческими версиями модуля. Настройте небольшой трафик, AB и онлайн-правила через эту платформу.
запустить изоляцию
1. Тяжелая ситуация парного развития
Когда мы продвигали проект в 2017 году, был очень хороший пост, который был очень популярен, был популярен в кругу друзей.react-loadable
из. ta вводит это направление из измерения развязки. У нас также была очень четкая бизнес-потребность в то время, чтобы объединить людей из разных отделов компании в один проект. И этот проект сильно раздулся и накопил массу непрямых инженерно-технических подробностей, достойных внимательного изучения после долгих лет откорма. Это означает использование разных организаций, разных технологий, разных технических спецификаций и инструментов упаковки для совместного написания одной и той же платформы и одного и того же проекта. Если вы использовалиiframe
Это может быть весьма импровизированное нежелание идти навстречу делу, что совершенно несовместимо с нашей привычкой гнаться за предельным.
Тогда в то время мы были очень обеспокоены такого рода межкомандным сотрудничеством.Мы хотели интегрировать различные технические команды, чтобы добиться меньших усилий или меньшего общения.Изоляция операций является очень базовой предпосылкой.Мы также потратили много места в нашем другой обмен. , как внутренний, так и внешний. Какой был эффект на тот момент. Вот ситуация, зафиксированная на нашем внутреннем обучении в апреле 2018 года:
Вставляем онлайн-страницу (левое изображение) в скрипт через средство отладки, временно убираем функцию песочницы и получаем эффект правого изображения.
2. Запустите цель, помещенную в карантин.
Что означает запущенная изоляция?Вспомним только что упомянутый вопрос теста AB, сколько комбинаций составляет 20 проектов. Если это соответствует размерности багов, то как страшно всем будет бегать в приложении. Так что же это сочетание дает нашим программам и программистам?
не висетьНе будет преувеличением сказать, что это «самое основное требование для всех инженеров». Первый уровень компетентности любого инженера-программиста должен состоять в том, чтобы не вывести систему из строя. После микросервисов эта проблема менее очевидна, потому что есть способы решения большинства проблем на архитектурном уровне. Теория, в которой я убежден, состоит в том, что у всех программистов есть четыре этапа: после написания требований они не тянут других вниз, они могут расширяться и хорошо работают.
НепрерывныйЭто еще одна большая проблема, мы во времена команды арбуз и заголовков были двумя отдельными приложениями, они были полностью кросс-секторами с нашим сотрудничеством, и даже правила Polyfill были разными. Заранее, многие общедоступные компоненты, CSS согласился. Но норм и условностей далеко не достаточно. Сфера сотрудничества должна быть лучшей, чтобы быть:
- Установите норму: каждый, кто приходит сюда, должен усердно учиться, внимательно слушать и нести полную ответственность за свое поведение.
- Способность применять нормы: не сознательно, а обнаруживать и применять с помощью инструментов и процессов для достижения надежности.
- Никакой спецификации не требуется: детерминизм системы разрешается системой. Если полагаться на то, что люди выявляют нормы и обеспечивают их соблюдение, потребляется много когнитивных ресурсов, а также возникает дополнительная рабочая нагрузка и системная неопределенность.
3. Песочница
У нас есть еще одна статья, посвященная дизайну песочницы и яме. Это краткая иллюстрация с несколькими картинками.
① Переменная защита:Глобальные переменные, DOM и CSS в основном идут по этому пути. Давайте сравним два снимка до и после, а затем поможем восстановить сцену по мере необходимости. Не буду подробно останавливаться на этом содержании, но с первого взгляда на картинку оно самоочевидно: одно сравнение и сравнение всех ключей, два обхода, местоположение в черном списке и только чтение в белом списке. Думаю, все понимают, о чем я говорю.
② Время песочницы:Скажи еще немного. На картинке справа показана временная диаграмма загрузки и микширования пяти сделанных нами модулей ABCDE. Левая часть пунктирной линии — это загрузка, а правая — время, затрачиваемое эксклюзивным потоком. То есть есть пять модулей и пять песочниц ABCDE, которые скомпилированы в этом модуле (скачайте, создайте js-переменные и функции, запустите эти операторы и, наконец, сгенерируйтеReact Component
) и время выполнения (этот модуль открывается, отрисовывая все соответствующие функции).
Здесь есть две основы: одиночный поток js, цикл обработки событий.
Мы использовали идею очень простой однопроцессорной операционной системы, аналогия в том, что одиночный поток js подобен одноядерному процессору. Вы активируете модуль, что эквивалентно активации потока, а все остальное отступает на задний план.
На самом деле одноядерность однопроцессорность не является неизбежной, этот принцип известен всем. На основе цикла событий мы можем инкапсулировать все асинхронные операции и обернуть обратный вызов после активации песочницы. НапримерsetTimeout
иaddEventListener
, чтобы каждый модуль работал параллельно. Об этом можно говорить много, но подумайте только об аналогии с операционной системой.
4. Способ загрузки
Реагировать проектыreact-loadable
Не так много, чтобы сказать само по себе,VUE
иraw
(то есть без оригинальной версии фреймворка уровня представления), мы предоставляемmasterpage
например, каждая версия реализует набор иreact-loadable
аналогичный эффект.
Подмодули (модули) представляют собой пакеты CMD один за другим, я используюnew Function
обернуть. Другой - это соглашение о структуре проекта конкретного главного проекта (MasterPage).Процесс загрузки разделен на 5 крючков:
-
preload
Предварительно загружатьpromise
,fullfill
Аякс срабатывает. Мастер может разработать различные политики блокировки бездействия; -
loadCondition
составить предварительные условия,fullfill
Только тогда эта часть начнет выполняться, а результатом выполнения будет получение CMDexports
; -
provider
Это функция точки входа модуля, предоставленная разработчиком модуля, и возвращает все выходные данные модуля. Входящие параметры этой функции предоставляются основным проектом мастер-страницы. -
loaded
Завершите загрузку и получите результат компиляции. - Не вдавайтесь в подробности позже.
Согласованная среда
Потому что мы говорили о том, что такое микросервисы и как они реализуются раньше, но мы никогда не говорили о них.Что нужно сделать, чтобы реализовать микросервис. Теперь мы впервые публикуем эту часть контента, и это также очень независимое измерение.
По сути, речь идет о том, почему этот согласованный с окружением инструмент необходим для микрофронтендов, и это единственный способ, который нельзя обойти. Если этого не делать, легко упасть в яму, и проект провалится. Тогда очень вероятно, что вы не знаете, почему это не удалось, и проблема списывается на проблему плохого фреймворка, плохих людей или даже плохих микрофронтендов.
1. Serverless vs container
container
Это паразитная среда, хотя эта среда совершенно особенная, в отличие от полноценной операционной системы, такой как Linux. Напротив, Serverless гораздо более особенный. Настолько особенный, что даже Google Cloud был побежден в бизнесе.
Вот два примера Serverless, такие какlambda
. Его родным инструментом является CLI-система: SAM, очень типичная необходимая инфраструктура. Если разработка контейнерного AWS опирается на докер, то разработка лямбда зависит от SAM.
Другой характерный примерfirebase
. Предположительно, студенты, работающие с фронтендом, очень хорошо разбираются и использовали свои комплекты для разработки. Эти инструменты придают большое значение локальной разработке Могу ли я протестировать проект, прежде чем начать его? Или сначала отладить.
Что нам нужно сделать, так это максимально смоделировать реальную среду.В случае SAM мы моделируем шлюз API, ограничение памяти и т. д. Есть живая отладка, локальная отладка. В противном случае, зачем кому-то посмеют помещать свой онлайн-бизнес в совершенно другую среду.
2. Есть ли у вас проблемы с окружающей средой (для меня это хорошо)
Одна из самых распространенных фраз, которую говорят программисты титров, — это правильно, а еще одно выражение — «Я в порядке». Все мы знаем, что в большинстве случаев так говорить неправильно, но часто не можем не сказать. Это даже больше похоже на то, что я говорю это себе. Своего рода самоанализ, самоистязание: «Я в порядке».
Мы используем песочницу, чтобы сделать микро-интерфейс похожим на контейнер, как докер в браузере. Но этого недостаточно, мы по-прежнему рассматриваем паразитирующие на мастер-странице характеристики фреймворка приложения, то есть специфическую логику бизнеса, как своего рода serverless.
Затем мы также делаем изолированную идею, нашуdev
Команда состоит в том, чтобы запустить полностью независимую сессию Chrome через параметры запуска, с собственными файлами cookie и кэшем.Эффект подобен установке 2 Chrome или даже нескольких Chrome. Затем прокси-инструмент также настраивается с параметрами запуска по умолчанию, который представляет собой pac-файл. Таким образом, его также можно использовать отдельно или с установленным переключателем.
прокси-инструментЭто вся конфигурация среды отладки, те, кто переходит в тестовую среду и какие строки запрашивают все управление прокси. Создайте динамический PAC-адрес и прокси-сервис. Только то, что я сказал.
Критические запросы, такие как запросы на обнаружение служб, очевидно, проксируются. Возьмите возвращаемое значение, которое мы настраиваем для локальной среды. Более подробная функция заключается в том, что мы можем помочь в отладке основного проекта (MasterPage), собрать модуль, а также вы можете использовать указанную версию MasterPage для вызова модуля, который вы пишете.
Вы также можете указать, следует ли загружать полный список онлайн-модулей, заменяя только те модули, которые вы отлаживаете.
У нас также есть полный набор сервисов, встроенных в сервер разработки webpack. Как упоминалось выше, поддержка любого инструмента упаковки не связана, но если вы его используете, мы можем помочь вам перезагрузить и частично обновить динамически. Подробности позже.
проверка выпускаЭто для регистрации в сервисе. В рамках этого блока наша команда сборки имеет набор проверок, соответствующих git-хукам.
Легко отлаживатьМы также в некоторой степени поддерживаем HMR. Мы можем разработать основной проект (MasterPage) и подмодуль (Module) как обычное фронтенд-приложение.После обновления подмодуля меняется состояние менеджера модулей, и используется встроенный механизм событийной шины для обновления. - визуализировать HMR.Этот механизм также можно использовать в среде vibe. .
Нашей общей библиотекой можно поделиться между модулями, импортировав ее в проект MasterPage и внешнюю в подмодуль. Подмодули, использующие определенную версию базовой библиотеки, также поддерживаются.
Vue использует глобальные переменные и расширения цепочки прототипов и в настоящее время не поддерживает отладку Hot Reload.
Другие преимущества фреймворка
框架上看就是 serverless 的方向。不是真的 serverless 是前端 serverless,业务 module 开发者很多东西都不用再关心了。 Примером может бытьconsole.log
. Теперь все знают, что онлайн-бизнес должен быть чистым и приличным, а консоль — опрятной. Это канонический уровень, о котором мы упоминали ранее, где мы можем поглотить все консоли и хранить стек ошибок. Затем, когда пользователь оставляет отзыв, он отправляется в фон обратной связи как метаданные трассировки и так далее.
Это все фреймворки на уровне мастер-страницы. Конечно не обязательно. Но можно сказать, что микрофронтенды дают очень удобный канал для организации подобных проектов.
Наша онлайн-карта исходного кода также контролируется в соответствии с фоновыми разрешениями управления обнаружением служб, и только разработчики могут ее видеть.
Внешний интерфейс нового поколения Outlook
Как упоминалось ранее, обнаружение служб — это общее управление ресурсами, доступными на внешнем интерфейсе. Эта возможность не ограничивается внешним интерфейсом микрослужбы во время выполнения. Применимо ко всем ресурсам, поговорим об этом.
Обнаружение службы + CDN
Чтобы абстрагировать полный интерфейсный доступ, сначала разделите его на 3 этапа: A загрузка страницы, B «обнаружение службы» и C загружает ресурсы в соответствии с результатами обнаружения службы. Дальше разные варианты. Наиболее интуитивным является сочетание AB, SSR отрисовывается, html запрашивается, и список ресурсов списка модулей готов. Мы называем эту систему ГЛУПОЙ. Конечно, в него можно собрать и ABC. Подробнее об этом позже.
Еще есть идея объединить БК.Я запрашиваю список.Само собой, я могу объединить в него весь js контент. Меньше лишних запросов.
Короче, эффект такой АВС.
Анализ токенов
Центральная служба отправляет контрольный сигнал правила на пограничный узел из центрального компьютерного зала, а пограничный узел получает запрос клиента и анализирует базовый токен поблизости.Этот процесс не зависит от других служб.
Этот токен предоставляется службой страницы также на границе. Так как он не проходит проверку в центральном компьютерном зале, действительность маркера должна зависеть от внешнего пакета SDK.
Высокая доступность
Можно сказать, что высокая доступность — это большое преимущество граничных вычислений, дающее нам дополнительное преимущество. Аварийное восстановление этой системы в основном эквивалентно зрелой технологии поддержания активности зонда, соответствующей интеллектуальной DNS.
Все, что нам нужно, — это синхронизировать пограничные узлы со службой мониторинга, и они будут динамически изменять DNS за считанные минуты. Если граничных узлов недостаточно для выживания, вы также можете использовать DNS в традиционном помещении с центральным компьютером.
Таким образом, подавляющему большинству трафика не нужно входить или выходить из центрального компьютерного зала, а все ресурсы находятся поблизости и осуществляют многоадресную рассылку.
конец
Вышеизложенное является полным содержанием этого обмена, Мы поделились опытом использования микро-фронтендов ByteDance за последние два года из деталей приземления и процесса мышления при столкновении с этими проблемами. Нам очень повезло, что наш проект получил поддержку достаточно влиятельных партнеров, и, наконец, добился относительно большого успеха, а также значительно улучшил качество тяжеловесной продукции.
Как и многие передовые и недавно разработанные концепции, микро-фронтенды все еще находятся в процессе быстрой эволюции и проверки, наши конкретные практики также быстро меняются, мы постоянно находим слабые места и исправляем их, а также стремимся развивать больше возможный. В этой борьбе от несовершенства к совершенству для меня большая честь поделиться своими достижениями с читателями. И после обмена, мы будем более благодарны, если мы сможем получить советы, обсуждения и предложения, и очень приветствуются. Мы также приглашаем более проницательных людей присоединиться к нам.Входящая ссылка.