"Удачи, ешьте яйца завтра утром. 』
Внизу есть культурное событие рубашки, чтобы пригласить вас принять участие.
В сентябре 2016 года мы объявили об открытом исходном коде Egg на JSConf China 2016, и с тех пор прошло 2 года.
существуетОбъявление о выпуске яйца 2.0Как уже упоминалось, основной код уже очень стабилен, и последующее внимание в основном сосредоточено наУлучшения для разработчиков.
EggЭто основная базовая структура Alibaba Node.js. Она ориентирована на область «базовой веб-инфраструктуры корпоративного уровня» и предоставляет «микроядро + механизм подключаемых модулей + возможности настройки инфраструктуры», что идеально обеспечивает баланс между экологическим взаимодействием. -Конструкция и дифференцированная настройка.
Он подходит не только для быстрой разработки личных небольших проектов, но также подходит для командных архитекторов для расширения фреймворка, подходящего для конкретных командных бизнес-сценариев, на базе Egg на основе собственной технической архитектуры.
Это обусловлено обширным опытом инженерной практики Али в различных областях различных отраслей промышленности и на протяжении многих лет стабильно поддерживало продвижение Tmall Double 11 с высоким трафиком.
Далее я поделюсь с вами некоторыми результатами и данными за последние 9 месяцев.Эта статья длинная, пожалуйста, наслаждайтесь ею медленно:
- Обмен данными разработчиков
- приглашение на культурное мероприятие
- Оптимизация опыта разработчиков
- Поддержка TypeScript
- Добавлен «Жизненный цикл».
- Руководство по доступу к алинодам
- Взаимодействие с Java
- Практический пример — рефакторинг сообщества cnode с помощью Egg
- Упорядочить обмен опытом ORM от команды Yuque
- Обмен опытом фронтенд-инжиниринга, например Webpack
- RFC для обработки ошибок и opentracing
- схема рефакторинга скелета egg-init
- план на будущее
## данные разработчика
- Официальный сайт PV составляет около 1,2 Вт.
- Существует 1006 яичных модулей npm и 3738 зависимостей GitHub.
- Более тысячи запросов на слияние, 2200 проблем и более 130 участников.
- Всего выпущена 81 версия,Release Note.
- Проекты общественной практики:cnodejs/egg-cnode,eggjs/awesome-egg
- Знать столбец Node.jsВсего опубликовано 48 статей, 7600 подписок, данные по чтению неизвестны (Zhihu Creator Center не смотрит на нас свысока и не проходит внутреннее тестирование 😭).
Компании, использующие яйца, неполная статистика:
- Глубина используемая: Али Баба, все люди живут, Netease Koala
- Пользуйтесь и делитесь опытом: куда идти, благодаря трению, отзывам
- Некоторые команды консультировались, чтобы прощупать почву, но я не знаю, приземлились ли они наконец: Meituan, Sina, Baidu, Tencent, YY и т. д.
Кстати, поделитесь cnpmСтатистические данные:
## Культурные мероприятия
Вы можете посетить следующую ссылку, чтобы поделиться своим практическим опытом,Есть шанс получить футболку с яйцом и сопутствующие аксессуары~
Кроме того, 10000-й Звездный одноклассник@zhyjor,Пожалуйста свяжитесь с нами.
Каким был EggJS в 2018 году? Как изменилось его восприятие?## Оптимизация опыта разработчиков
Далее я поделюсь с вами некоторыми оптимизациями, которые мы сделали в «опыте разработчиков» за этот период времени.
### TypeScript
TypeScript был очень популярен в последние несколько лет.Его статическая проверка типов, интеллектуальные подсказки, удобство IDE и другие функции очень ценны для крупномасштабных приложений корпоративного уровня, и он считается одним из будущих JS корпоративного уровня. разработка.
Али давно практикует ТС, пять месяцев назад мы тоже поделились некоторыми из наших зрелых практик:
Tianzhu: когда Egg встречает TypeScript, собирайте чайное яйцобольшое спасибо
@ акридиновыйДальнейшие работы в этой области:- Примечания по устранению неполадок для стеков ошибок в ts-node
- Сводка по модернизации Egg TS
- Практика Typescript в приложении Egg + Vue
Этот блок все еще находится в стадии постоянной оптимизации. Заинтересованные студенты могут принять участие в следующих оптимизациях:
- egg-ts-helper добавляет поддержку js, так что учащиеся, не являющиеся ts, также могут пользоваться бонусом Buffer в виде интеллектуальных подсказок и статических проверок.
- Улучшите d.ts, который поставляется с плагином, чтобы облегчить работу других разработчиков.
- Поделитесь своими обертками верхнего уровня, такими как регистрация маршрутов или АОП через декораторы. (Существует много внутренних практик, но консенсуса достигнуто не было)
PS: Сам Egg.js не будет переписываться с использованием TypeScript.Для самого фреймворка гибкость JS может упростить реализацию некоторых функций, и в нем нет такой сложной бизнес-логики.Приходите за дополнительной помощью.
### жизненный цикл
Перед яйцом доступно для небольших разработчиков крючком в начале периода запуска, только несколько бероэтарт.
благодарныйkillaguОдноклассники дополнили нас более подробным жизненным циклом.Соответствующие RFC и документы таковы:
- [RFC] egg-core добавляет фазу запуска приложения · Issue #2520
- Документация по яйцам — жизненный цикл(В настоящее время в документе еще много возможностей для оптимизации, и мы продолжим его улучшать в будущем.)
// app.js
class AppBootHook {
configDidLoad() {
// Config, Plugin files have did load.
}
async didLoad() {
// All files have did load, start plugin here.
}
async willReady() {
// All plugins have started, can do some thing before app ready.
}
async didReady() {
// Worker is ready, can do some things don't need to block the app boot.
}
async serverDidReady() {
// Server is listening.
}
async beforeClose() {
// Do some thing before app close.
}
}
### Alinode
С развитием Node сегодня он все шире используется для разделения интерфейсов и серверов, разработки полного стека, клиентских инструментов и других областей.
Однако, по сравнению с активной разработкой прикладного уровня, его Runtime находится в состоянии черного ящика для большинства фронтенд-разработчиков, которое не было хорошо улучшено, что препятствует применению Node.js в бизнес-приложении и продвижении.
Как разработчик Node, самой большой головной болью являются необъяснимые 100% CPU и OOM, вызванные утечками памяти.
К счастью, Alibaba Cloud
@Парк ЛингкомандаизПлатформа производительности Node.jsОбеспечивает разработчики узла:性能监控、安全提醒、故障排查、性能优化
Он предоставляет комплексную цепочку инструментов и услуг, помогающих разработчикам быстро обнаруживать и локализовать онлайн-проблемы. За прошедшие годы он решил для нас множество онлайн-проблем и сопровождал наш бизнес.Связанный обмен:
- Раскрыто место преступления узла — Coredump восстанавливает онлайн-исключения
- Кровавая утечка памяти, вызванная строкой удаления require.cache
- Документация по яйцам — Доступ в один клик Alinode
Конечно, в ежедневных вопросах и ответах многие студенты также выражали озабоченность по поводу безопасности данных. С моей личной точки зрения, все скрипты сбора Alinode имеют открытый исходный код и не будут собирать личные данные. Это действительно невозможно, его можно использовать в период стресс-теста, он определенно может спасти нас от небольшого выпадения волос, и совесть рекомендует это.
### Взаимодействие с Java
Node.js разрабатывается в Анте и Али уже четыре-пять лет, с самого начала как «игрушка для фронтенд-инженеров», до взлома сценариев Web и BFF и постепенного выхода в онлайн и даже некоторых профильных бизнесов. , это нелегко.
Оглядываясь назад, почему Nodejs выжил? Опираясь не только на: неблокирующий ввод-вывод, управляемый событиями, легкий вес, эти официально рекламируемые функции,Мы считаем, что более важным моментом является то, что мы открыли мост с Java и реализовали взаимосвязь, которая делает ее действительно интегрированной в техническую систему Али.
сопровождатьСтек технологий Java Ant SOFAМы также открыли модули, связанные с Nodejs RPC, в надежде заполнить пробел в сообществе Nodejs, а также подведем итоги и поделимся нашим опытом в области базовой технологии Nodejs за последние несколько лет.
Рекомендуется прочитать соответствующие научно-популярные статьи сестры Сяомарузи:
- Межмодуляция между перекрестными языками между Eggjs и диваном
- Разговор о Node.js RPC (1) — протокол
- Разговор о Node.js RPC (2) — Service Discovery
### egg-cnode
По инициативе мистера Пакаcnodejs/egg-cnodeПроект переписывает приложение сообщества cnode с помощью Egg.
В настоящее время завершил реконструкцию функциональных уровней и завершения испытательных случаев:
- Уменьшение количества файлов 41, 22%
- Количество строк кода уменьшилось на 2460 строк, снижение на 4,7%.
- Код теста уменьшен на 980 строк, сокращение на 39%, а коэффициент покрытия выше, чем в исходном проекте.
В настоящее время еще есть много возможностей для оптимизации, потому что первый этап фокусируется на переносе функций и не делает больших оптимизаций. Некоторые методы использования не соответствуют лучшим практикам Egg. Заинтересованные студенты могут присоединиться и совершенствоваться вместе.
### Известные RFC и акции
В ежедневном сотрудничестве команда eggjs придерживается «асинхронной модели совместной работы на жестком диске на основе GitLab».
пройти черезissueИнициировать предложение RFC -> обсудить доработку -> отправить запрос на включение -> проверка кода -> опубликовать.
Это удобно для осадки, и даже разработчики, не участвовавшие в обсуждении на тот момент, могут потом сдать вопрос. Понять причину и следствие особенностей дизайна.
Θ отКоманда Юке Обмен практикой ORM
- Yuque разработан на основе стека технологий Egg и является одним из немногих крупных Node-приложений, включающих различные технические моменты.
- Документация по яйцу — Sequelize
Θ Обмен опытом фронтенд-инжиниринга, например Webpack
- Документация по яйцу - Активы Статические ресурсы
- отeasywebpackупражняться
- Изоморфный каркас верхнего слоя:alibaba/beidouа такжеSerlina
Θ Обработка ошибок и отслеживание проблем
- [RFC] egg-opentracing · Issue #39
- [RFC] Применить пользовательскую программу 4xx и 5xx · Выпуск # 1086
- [RFC] Подсчет трудоемких этапов процесса загрузки яиц · Проблема № 1898
- handle unconsume multipart request data in egg itself. · Issue #2897
Θ Оптимизация инструмента
Текущий egg-init имеет следующие проблемы:
- Логика скаффолдинга централизована, все в
egg-init
Само по себе, как глобальная команда, обновление неудобно. - Шаблоны не могут настраивать собственную логику и не могут совместно использовать код.
- нет вспомогательного генератора, такого как
egg-init add controller Test
такая функция. - Леса используются только при инициализации проекта, они не могут поддерживать функцию обновления, их легко разъедать и раскалывать.
- Верхняя инкапсуляция неудобна и не поддерживает пресеты.
Следовательно, "[RFC] egg-init refactor ’, он должен быть завершен в следующем месяце и разослан всем.
Θ Популярная наука
Когда дело доходит до Egg, мы должны гордиться нашей документацией.Мы знаем, что фронтенд-разработчикам еще многое предстоит узнать о внутренних знаниях, и мы рады поделиться своими практиками:
pockry: Интервью с Dead Horse: Почему Egg.js — это корпоративная платформа Node.js- Popular Science: Что, если эксплуатация и обслуживание не обновят версию Node?
- Popular Science: почему npm не устанавливается на сервер?
- Разговор о Node.js RPC (1) — протокол
- Разговор о Node.js RPC (2) — Service Discovery
## план на будущее
Честно говоря, новых функций не так много, и вот почему: Egg использует«Микроядро + Плагины + Верхний фреймворк»модель.
Собственная итерация Egg использует механизм разработки плагинов, а функции разбросаны по разным модулям.Возможно, разработчики не могут воспринимать изменения его версии при его использовании, но на самом деле он всегда развивается. Каждую неделю могут появляться новые функции и выпуски исправлений ошибок, Egg - это скорее «реформатор», чем «реформатор», он будет продолжать развиваться в соответствии с предпосылкой совместимости.
Следующий план будет по-прежнему размещаться в "Оптимизация опыта разработчиков + обмен практическим опытом»аспект.
- Рефакторинг и оптимизация тулчейна и скелета egg cli.
- Продолжить оптимизацию TypeScript и добавить поддержку js project intellisense.
- Больше практических проектов и научно-популярного обмена.
- глобализация.
Нашей собственной энергии недостаточно, мы приглашаем всех участников сообщества присоединиться к нам и совместно способствовать развитию Node.
## напишите в конце
Если вам нравится яйцо, пожалуйста, поддержите нас:
- Поделитесь этой статьей и поставьте лайк.
- Приходите и поделитесь своей практикой, независимо от того, большая она или маленькая, это очень важно, спасибо, будет шанс получить нашу футболку.
- Если вам понравилась моя статья, подписывайтесьмоя чжихуа такжеFollow GitHub
- Игра Гуанчжоу Али, рекрутинговый интерфейс, знакомый с динамическими эффектами, скорость узла ~