Я провел некоторое время, читая статьи здесь на кодаменте, и я видел много любви для Node.js в качестве платформы. Эта похвала гарантирована, узел является фантастической технологией для получения исполнительной работы Perfortant API, который соединяет несколько услуг – базы данных, другие API и т. Д. Я сделал это в течение нескольких лет в нескольких разных проектах, и даже вносил некоторые пакеты на NPM, которые все еще в использовании сегодня. Преимущества работы чисто в JS, простота взаимодействия с JSON и массовым количеством библиотек всех составляют узел приятно работать в.
Но есть одна вещь, которую я видел, повторю себя снова и снова в технологической отрасли, и это Nerdlove. Разработчики влюбляются в технологии и забывают о том, что обе другие вещи существуют, и что их любимая технология делает технические компромиссы, а иногда эти компромиссы не полезны для этой задачи. Я столкнулся с некоторыми из этих компромиссов во время разработки приложений узла, и я хотел бы поделиться некоторыми своими опытом с этим и напомнить всем, что там есть другие вещи.
Первая альтернативная технология, о которой я буду говорить сегодня Tymdercript , который является языком компиляционного для JavaScript Microsoft несколько лет назад. Я знаю, что многие разработчики узлов в наши дни шунируют языки для компиляций до js и по хорошей причине: многие из предыдущих, которые набирают популярность некоторое время, сделали на показ, потому что они на самом деле не предложили много на вершине JS кроме немного другого синтаксиса. CoffeeScript – это отличный пример, он был в основном просто чистый синтаксис Ruby/Python-ISH для семантики JavaScript и поэтому не имел вполне возможности пребывания другого языка с фактическими преимуществами.
Teadercript немного отличается. Это SuperSet javaScript, что означает, что вы можете просто написать JavaScript, запустите его через Tymdercript Compiler, и он просто будет работать. Из-за этого вы можете постепенно начать применять Typescript, и использовать функции Tymdercript, которые вам полезны. Преимущество, которое Tymdercript добавляет к JavaScript, состоит в том, что вы можете аннотировать типы в вашем коде и иметь компилятор, проверяя эти типы, так же, как он будет в статически набранном языке. Однако, поскольку это необязательно, оно не уходит на свой путь почти так же, как и в статически набранном языке.
Когда вы можете использовать TeampScript? Там, где он действительно сияет, когда у вас есть существующая система узла-с-JavaScript, которая имеет много компонентов, разговаривающих друг другу через сеть через очереди сообщений, API и т. Д. Если разработчик изменяет систему, но забывает исправить его на другой стороне , вы можете в конечном итоге с непоследовательностью типа. Установки тесты не сохраняют вас здесь, потому что они предназначены для тестирования одного компонента в изоляции (отсюда и название «единицы»), а хорошие тестовые составляющие интеграции по своей природе трудно писать из-за комбинаторного взрыва входных возможностей и на практике часто не существуют вообще. Наличие проверки времени компиляции на интерфейсах между вашими компонентами помогает убедиться, что все говорят на одном языке. Буфет протокола Действительно полезны здесь, поскольку они языковые агностики, но просто используя общий класс тоже может быть полезен. Я также обнаружил, что явно заявляя, что ваши типы помогают борту новых людей гораздо быстрее, особенно юниоры. Когда кто-то новый, они на самом деле не понимают, какие поля доступны или что они делают; Ваши декларации типа являются полезными документацией, которые не выходят на дату.
Какие недостатки Tymdercript на JavaScript? Основной является то, что вам нужен шаг сборки при развертывании вашего кода. Это становится немного на пути цикла запуска записи, который вы часто используете в узле, который позволяет людям очень быстро развиваться. Поскольку основные преимущества Tymdercript не пинайте, пока у вас больше людей в вашей команде нет или когда у вас есть более зрелый продукт, он менее подходит для быстрого быстрого итерации, который вы будете использовать в начале стартапа.
Кто использует TeampScript? Некоторые заметные примеры eBay , Угловой (и другие части Google в целом), Ericsson и Kaggle Отказ Вы можете видеть много других на TypestScript’s https://www.typescriptlang.org/community/rimss.html Отказ
Давайте немного дальше от JavaScript сейчас. Tymdercript отлично, но вы все еще используете на верхней части узла, все еще используете NPM и т. Д., Итак, оно все еще имеет те же проблемы, которые есть у узла. Следующий язык, о котором я хочу поговорить Идти , языковой язык программирования системы из Google, который изначально был разработан для замены C ++, но завершил использование для всех видов других вещей.
В отличие от TypectScript, GO требует, чтобы все типы были явно определены, компилируется в двоичном двоике, а не интерпретировать, и в отличие от базовой системы Node.js, которую использует Tearscript, это многопоточна. Потому что Go’s Goroutine System настолько легкий, это Не нужен Асинхронные функции могут быть быстрыми. Это огромная победа, так как вы больше не нахожусь в обратном вызове ада или связаться с сложными цепями обещаний.
Многие люди в сообществе узла скептически скептическими из статически набранных языков, таких как Go, потому что они привыкли к пожилым языкам, таким как C ++ и Java, которые довольно многословны и требуют, чтобы много ботингов просто было, чтобы удовлетворить компилятор. Система типа Go намного проще, и в то время как многие в статически набранном мире есть их критика, я обнаружил, что люди, приходящие с динамически напечатанных языков, таких как JavaScript, Python, и Ruby предпочитают систему типа, потому что это более тесно Соответствует тому, как люди пишут код на этих языках.
Когда вы можете использовать? Одним из основных недостатков узла является то, что он является однопоточным, поэтому, если у вас есть что-то, что является процессором, как обработка строки, количество хруста, принуждение к схему и т. Д. этот расчет. Поскольку Go – многопоточно-резьбо, он может иметь некоторые Goroutines, обрабатывающие новые соединения, в то время как разные управляют обработкой (которая сама намного быстрее из-за собственного компиляции).
Еще одно преимущество, которое уходит, это его след. Если вы запускаете широкомасштабную настройку на облачных виртуальных машинах, и вы окажетесь за ними тонны денег, Go может быть полезной заменой для ваших широко развернутых услуг, поскольку она делает гораздо более эффективное использование CPU и RAM, чем узел. Пример моего опыта был, когда у меня работал несколько серверов чата на основе Socket.io на цифровом экземпляре Micro Ocean (512 МБ ОЗУ), я мог запускать только 2 узла процессов на экземпляр, прежде чем они начали заканчиваться памятью. Каждый процесс узла будет использовать около 200 МБ ОЗУ и около 30% процессора. Переписывайте эти серверы в Go, который занял только день или около того, они использовали около 10 МБ ОЗУ и менее 1% процессора.
Наконец, поскольку Go статически набирается, то некоторые из тех же причин, которые TypeyScript полезны, также относится к Go.
Каковы недостатки? Как и в WhiteScript, GO имеет участие в шаге сборки, хотя вы можете запустить программу напрямую, используя Иди беги
инструмент командной строки. Время сборки достаточно быстро, чтобы она не слишком отличалась от запущенного интерпретации программы, но она все еще является дополнительным препятствием и часто может привести к некоторым странным ошибкам компилятора, когда вы все еще новы на языке.
В пойти, немного раздражает, чтобы использовать структуры данных, отличные от массивов и карт, поскольку они должны быть «динамически» набраны, вам часто приходится скриться с литяками, чтобы сделать компилятор счастливым.
Недостаток по сравнению с Teadercript – это то, что вы не можете просто начать использовать его в пределах существующего приложения узла, вы должны переписать вещи. Я сделал это в прошлом, хотя, поскольку я использовал Rabbitmq для моих компонентов, чтобы поговорить друг с другом, это был довольно простым процессом повторного написания одного модуля, который был связан с ЦП и слишком долго. Если ваше приложение более монолит, то у вас может быть слишком много головных болей, распутывающих вещи, чтобы выключить его настолько.
Кто его использует? Для одного я делаю в Apigee И сделал на Youtube для некоторых приложений. Другие пользователи Докер , Кубернаны , ISTIO , не говоря уже о скорее большой список Опубликовано на GITHUB REPO.
Это просто быстрое обследование двух альтернатив узла. Есть много других языков, которые появляются повсюду повсюду, но я выбрал этих людей, потому что на данный момент они довольно зрелые и доказали полезные в производственных средах, и они часто используются в аналогичных приложениях в качестве узла, такого как Отдых API и инфраструктура серверов. Если вы похожи на меня, и побежали в растущие боли, когда ваше приложение расширилось, то, надеюсь, эти выборы помогают вам!