На JS Conf Berlin ранее Райан Даль, известный как отец Nodejs, выступил с речью «10 вещей, о которых я сожалею о Node.js» и выпустил новый проект Deno.Стоит отметить, что это второй публичный доклад Райа, и первый — это выпуск Node.js, эта статья расскажет вам об основных моментах выступления Рая.
Резюме, нарисованное от руки пользователя твиттера @malweeneОбсуждение, часть 1: Успех Nodejs
В этой части рассказывается о процессе разработки Node. Рай считает, что Node проделал хорошую работу в I/0, управляемом событиями http-сервере, и упоминает поддержку Node некоторых протоколов, кроссплатформенность, экосистему npm и т. д. для продвижения Node. Фактор успеха, и благодаря некоторым людям, которые внесли свой вклад в Node. Рай всегда считал, что JavaScript — лучший динамический язык, а динамический язык подходит для научных вычислений (это может быть связано с тем, что Рай присоединился к команде Google Brain после ухода из Node, занимаясь исследованиями в области глубокого обучения).
Выступление, часть 2: Tucao на Nodejs
Эта часть, можно сказать, стала кульминацией всего выступления, она жаловалась на 7 (не должно быть 10???) дизайнов на Node, о которых сожалел RY.
1. Не выполнять обещания
Promise — необходимая абстракция для async/await. Отсутствие настойчивости в Promise привело к серьезному устареванию многих асинхронных API в Node.
2. Недостаточная безопасность
V8 сама по себе является очень хорошей средой-песочницей, но Node не воспользовался этим врожденным преимуществом в своей ранней разработке, в результате чего программы могут легко получить доступ к системе и сети.
3. Неправильно придерживаться GYP
Поскольку Chrome отказался от GYP, Node является единственным пользователем GYP, а Рай считает, что существует слишком много сложных и ненужных абстракций.Вместо того, чтобы позволить пользователям писать расширения C++ для привязки V8, лучше предоставить основной внешний интерфейс функций, более надежный. . Рай считает ошибки проектирования в системе сборки самым большим сожалением Node.
4. package.json
Из-за поддержки require, package.json позже стал стандартом модуля де-факто, но, к сожалению, поскольку существование package.json признано, но требование ('модуль') неоднозначно, что приводит к локальным зависимостям, когда дело доходит до библиотеки или частные зависимости, это становится очень запутанным. А package.json содержит слишком много избыточных описаний, лицензий, репозиториев, описаний и т. д., а «модуль», предлагаемый package.json в качестве каталога файлов, не является необходимой абстракцией.
5. node_module
Это увеличивает сложность синтаксического анализа модуля и отклоняется от семантики браузера, но устранить его сейчас нельзя.
6. require('module') без расширения ".js"
Это избыточно, и загрузчик модуля должен угадать, является ли это «.js» или «.json», что также несовместимо с семантикой браузера.
7. index.js
На самом деле не обязательно загружать index.js по умолчанию, потому что может быть index.html….
Упомянутые выше сожаления в основном связаны с управлением кодом, а не с созданием высокопроизводительных серверов, на которых Рай сосредоточился ранее. На самом деле, когда Ry высказал эти сожаления, это было равносильно тому, что он предложил прототип нового поколения среды выполнения js/ts v8 -> Deno, и его основной целью было решение вышеуказанных проблем.
Лекция, часть 3: Введение и ожидания от Deno
1. Безопасность
Deno воспользуется тем фактом, что JS — это песочница безопасности, позволяющая безопасно запускать ненадежные программы.
- По умолчанию программам запрещен прямой доступ к сети или файловой системе.
- Доступен с помощью --allow-net --allow-write Не позволяет напрямую привязывать функции расширения к V8, что упрощает процесс и упрощает аудит.
- Все системные вызовы выполняются через передачу сообщений (сериализация protobuf).
- Две нативные функции: send и recv
2. Упростите модульную систему
- Не буду пробовать и модульная система совместима с существующим Node.
- Импортируйте только относительный / абсолютный URL-адрес, и вы должны предоставить путь к расширению импорта
- Удаленный URL-адрес будет кэшироваться навсегда после первой загрузки, укажите только --reload для повторного получения ресурса, что можно обойти, указав каталог кэширования не по умолчанию.
3. Встройте компилятор TypeScript в исполняемый файл
- Deno имеет встроенный компилятор TS для инкрементного кэширования разрешения модуля и результатов сборки.
- Немодифицированные файлы TS не перекомпилируются
- Обычный JS работает так же хорошо
- Используйте моментальный снимок V8 для быстрого запуска, еще не спроектированного в прототипе (см.«Использование моментального снимка v8 для увеличения скорости запуска в 8 раз»)
4. Один исполняемый файл
5. Воспользуйтесь преимуществами технологий 2018 года
Используйте Parcel для компиляции и упаковки модулей Node для обеспечения начальной загрузки во время выполнения.
Обеспечивает надежную инфраструктуру в собственном коде
- Существуют и другие механизмы, ответственные за реализацию HTTP, которые раньше были невозможны в Node.
- В настоящее время не-JS части Deno написаны на ходу, но прототипирование еще не полностью завершено, на самом деле Rust и C++ также хороши в некоторых аспектах.
6. Другое
- Завершить программу при возникновении неперехваченной ошибки Promise
- Поддержка ожидания верхнего уровня
- Совместимые браузеры (когда функции перекрываются)
Речь Рая примерно такая: хотя Deno до сих пор недоступен и не выпустил бинарную версию, проект всего за несколько дней набрал десятки тысяч звезд.
Послесловие:
В настоящее время проектирование крупномасштабной внешней разработки, SSR и другие возможности в основном предоставляются Node, плюс некоторые внутренние службы, созданные с использованием преимуществ Node, все имеют определенное время разработки.Поэтому для разработчиков JS У Node еще много времени на будущее, но это все еще проект, который стоит продолжать изучать.
Конечно, если вы одобряете какие-то разработки Deno, лучший способ сейчас — это начать инвестировать в обучение.Начните с изучения языка Go, а после изучения Go перейдите к исходникам Deno, а также при чтении можно упомянуть PR. После прочтения исходного кода Deno API почти закончился, вы можете использовать TypeScript для написания демо, и, наконец, даже если никто не использует Deno в музее, вы все равно изучили Go и Typescript и предоставили исходный код для крупных проектов с открытым исходным кодом. ..
Использованная литература: