Node.js - чудове середовище виконання - і ось чому ви повинні ним користуватися

Вступ до масштабованого, розширюваного, легкодоступного, самодостатнього та високоефективного середовища виконання

Node.js - це міжплатформене середовище виконання для JavaScript, яке є безкоштовним та відкритим. Він є повним стеком, тому його можна використовувати для розробки як на стороні клієнта, так і на стороні сервера.

Хто використовує Node.js? Node.js - популярний вибір технологічного стеку для компаній, що розробляють онлайн-ігри, месенджери, платформи соціальних медіа чи інструменти для відеоконференцій. Він ідеально підходить для додатків у режимі реального часу, які потребують постійного оновлення даних програми.

Перш ніж почати перераховувати переваги Node.js, мені потрібно щось пояснити. Існує певна термінологія, яку слід уточнити, щоб ми всі були на одній сторінці. Якщо вам відомі ці поняття, сміливо прокручуйте їх повз.

Двигун Google V8 - це движок, з яким реалізовано Node.js. Спочатку він був розроблений Google і для Google. V8 був написаний на C ++ і мав на меті компілювати функції JS у машинний код. Таким же двигуном користується Google Chrome. Він відомий вражаюче високими швидкостями та постійно покращуваними характеристиками.

Модель, що базується на подіях, означає процес виявлення подій, як тільки вони відбуваються, і боротьби з ними відповідно. Ви можете використовувати Promises, Async / Await та зворотні дзвінки для обробки подій. Наприклад, цей фрагмент представляє обробку записів файлів csv за допомогою моделі події Promise.

const createCsvWriter = require('csv-writer').createObjectCsvWriter; const path = ‘logs.csv”; const header = [ { id: 'id', title: 'id’ }, { id: 'message', title: 'message' }, { id: 'timestamp', title: 'timestamp' } ]; const data = [ { 'id': 0, 'message': 'message1', 'timestamp': 'localtime1' }, { 'id': 1, 'message': 'message2', 'timestamp': 'localtime2' }, { 'id': 2, 'message': 'message3', 'timestamp': 'localtime3' } ]; const csvWriter = createCsvWriter({ path, header }); csvWriter .writeRecords(data) .then( ()=> console.log('The CSV file was written successfully!') ) .catch( err => console.error("Error: ", err) );

Неблокуюча обробка вхідних / вихідних запитів - це спосіб, яким Node.js обробляє запити. Зазвичай код виконується послідовно. Запит не може бути оброблений, доки попередній не буде закінчений. У неблокувальній моделі запити не повинні чекати в рядку. Таким чином, потік в Node.js є найефективнішим, обробка запитів є одночасною, а час відповіді короткий.

npm - це менеджер пакетів Node.js і відкритий ринок для різноманітних інструментів JS. Це найбільший реєстр програмного забезпечення у світі. В даний час у ньому працює понад 836 000 бібліотек.

То чому навіщо розробляти Node.js? Давайте подивимося, які переваги Node.js.

2 хв

JavaScript

Node.js заснований на JavaScript. JavaScript - одна з найпопулярніших та найпростіших мов кодування в світі ІТ. Це легко навчитися для початківців розробників. Навіть люди, які не знають JavaScript, але мають деякі базові технічні знання, можуть читати та розуміти код.

Більше того, набір талантів JavaScript великий, тому, як власник бізнесу, ви маєте повну свободу вибору команди, з якою працювати.

Масштабованість

Програми Node.js легко масштабуються як по горизонталі, так і по вертикалі. По горизонталі нові вузли легко додаються до існуючої системи. По вертикалі додаткові ресурси можна легко додати до існуючих вузлів.

При розробці програми за допомогою Node.js вам не потрібно створювати велике монолітне ядро. Натомість ви можете розробити набір модулів та мікропослуг, кожен з яких працює у своєму процесі. Усі ці невеликі служби взаємодіють із легкими механізмами та складають вашу програму. Додавання додаткової мікросервіси настільки просто, наскільки це можливо. Таким чином, процес розробки стає набагато гнучкішим.

Розширюваність

Серед інших переваг Node.js є можливість інтегрувати його з різноманітними корисними інструментами. Node.js можна легко налаштувати та розширити.

Його можна розширити за допомогою вбудованих API для розробки HTTP або DNS-серверів. Для полегшення інтерфейсної розробки зі старими версіями Node або браузера Node.js може бути інтегрований із компілятором JS Babel.

Для модульного тестування він чудово працює, наприклад, з Жасмином. Для моніторингу розгортання та усунення несправностей він добре працює з Log.io.

Такі інструменти, як Migrat, PM2 та Webpack, можуть бути використані відповідно для міграції даних, управління процесами та групування модулів. Крім того, Node.js розширений такими фреймворками, як Express, Hapi, Meteor, Koa, Fastify, Nest, Restify та багатьма іншими.

Доступність

Node.js є відкритим кодом. Творець надав кожному право вчитися, розробляти та розповсюджувати технологію для будь-яких цілей. Середовище Node.js є стовідсотково безкоштовним. Готові модулі, бібліотеки та зразки коду відкриті, тому ви можете легко та безкоштовно налаштувати свою програму. Можливість навчитися працювати з Node.js також доступна кожному, хто бажає придбати цю технологію.

Самодостатність

Існує маса зручних сховищ з різними готовими модулями. Диспетчер пакунків за замовчуванням npm також пропонує безліч додаткових бібліотек та інструментів. Це значно полегшує процес розвитку.

Крім того, технологію Node.js можна використовувати для розробки інтерфейсу та інтерфейсу однією мовою. Ви можете працювати з однією командою, поки не буде впроваджений кінцевий продукт. Це спрощує спілкування та позбавляє вас від багатьох організаційних завдань.

Ви навіть можете використовувати Node.js як платформу для навчання машинного навчання та штучного інтелекту.

const tf = require('@tensorflow/tfjs-node'); const trainData = [ { input: [-120, -100, -60, -40, -60, -80, -80, -60, -40, -60, -80, -100].map(value => Math.abs(value)), output: [1]}, { input: [-82, -63, -45, -55, -77, -98, -122, -90, -55, -44, -61, -78].map(value => Math.abs(value)), output: [0]}, . . . { input: [-80, -60, -40, -60, -80, -100, -120, -100, -60, -40, -60, -80].map(value => Math.abs(value)), output: [0]}, ]; const model = tf.sequential(); model.add(tf.layers.dense({inputShape: [12], units: 12, activation: 'sigmoid'})); model.add(tf.layers.dense({units: 1, activation: 'sigmoid'})); const preparedData = tf.tidy(() => { tf.util.shuffle(arr); const inputs = arr.map(d => d.input) const outputs = arr.map(d => d.output); const inputTensor = tf.tensor2d(inputs, [arr.length, arr[0].input.length]); const labelTensor = tf.tensor2d(outputs, [arr.length, 1]); const inputMax = inputTensor.max(); const inputMin = inputTensor.min(); const labelMax = labelTensor.max(); const labelMin = labelTensor.min(); const normalizedInputs = inputTensor.sub(inputMin).div(inputMax.sub(inputMin)); const normalizedOutputs = labelTensor return { inputs: normalizedInputs, outputs: normalizedOutputs, inputMax, inputMin, labelMax, labelMin, } }); model.compile({ optimizer: tf.train.adam(), loss: tf.losses.meanSquaredError, metrics: ['mse'], }); const batchSize = 32; const epochs = 50; const trainedModel = model.fit(inputs, outputs, { batchSize, epochs, shuffle: true, });

Універсальність

Node.js є крос-платформним. Наприклад, розробник Node.js може створити міжплатформовий настільний додаток для Windows, Linux та Mac. Більше того, Node.js призначений не лише для мобільних, настільних і веб-розробок. Переваги Node.js активно застосовуються при розробці хмарних або IoT-рішень.

Простота

Node.js має низький поріг входу. Це досить просто придбати для людей, які знають JavaScript. Слід також зазначити, що низький поріг вступу безпосередньо перетворюється на занадто велику кількість неякісних спеціалістів.

Автоматизація

Node.js надає можливість автоматизувати повторювані операції, планувати дії або ділитися записами модифікацій. Node.js автоматично групує функції та підтримує ваш код у порядку. Крім того, існує велика вбудована бібліотека шаблонів інтерфейсу користувача або готові до використання функції.

Висока продуктивність, швидкість та економія ресурсів

У Node.js код JavaScript інтерпретується за допомогою механізму Google V8 JS. Google вкладає значні кошти в свій двигун, тому продуктивність постійно покращується.

Node.js виконує код за межами веб-браузера, що значно покращує продуктивність та ефективність використання програми. Крім того, це дозволяє використовувати функції, недоступні для браузера, такі як прямий API файлової системи, сокети TCP тощо.

Виконання коду є швидким, і декілька запитів можуть бути оброблені одночасно, оскільки середовище виконання Node.js підтримує неблокувальні операції введення / виводу, керовані подіями. Node.js також пропонує функцію кешування одного модуля, що дозволяє додатку швидше завантажуватися та бути більш чуйним.

Підтримка громади

Серед переваг використання Node.js розробники відзначають світову спільноту розробників. Існує величезна кількість активних розробників, які роблять внесок у відкритий код, розробляють і підтримують структуру, а також діляться своїми досвідом навчання або досвідом кодування з іншими.

Node.js добре підтримується на GitHub, і він там популярніший, ніж, наприклад, React. Більше того, такі компанії, як IBM, PayPal, eBay, Microsoft, Netflix, Yahoo !, LinkedIn або NASA, підтримують і активно використовують Node.js.

Однак ...

Не чесно було б перераховувати лише переваги Node.js, не згадуючи про недоліки Node.js. Представлення однобічної точки зору не є здоровою практикою. Я хочу, щоб ви розуміли, що жодне рішення не є ідеальним, і Node.js не є винятком.

Repositories are extended, but sometimes, they resemble a landfill. There are a lot of unnecessary, overly complicated, or incomprehensible modules. The language has some confusing features, which are difficult to understand. Some modern libs and frameworks are overloaded. My takeaway is as follows: measure is a treasure. If you know well what you are working with and how to do it best, Node,js is the tool you need. Why do we use Node js? Because there are a lot of useful features, the code is easy to understand, and the solutions can be effective. Otherwise – oh well.Антон Трофімов

Do you have an idea for a Node.js project?

My company KeenEthics is an experienced Node.js development company. In case you need a free estimate of a similar project, feel free to get in touch.

Якщо вам сподобалась стаття, вам слід продовжити з Node.js Inject: Як проводити та чому використовувати або Поради щодо безпеки Express.js.

PS

Величезний крик Володії Андрущаку та Антону Трофімову, розробникам програмного забезпечення з повним стеком @ KeenEthics за допомогу зі статтею.

Оригінальну статтю, розміщену в блозі KeenEthics, можна знайти тут: Які переваги Node.JS?