Node.JS [ru] | Серверный JavaScript
11.5K subscribers
92 photos
6 videos
25 files
3.17K links
Все о разработке backend части на JavaScript (Node JS).
А так же: Express JS, Next JS, Nest, Socket.IO

Канал на бирже - https://telega.in/c/we_use_js

По вопросам рекламы или разработки: @g_abashkin

РКН: https://vk.cc/cJPGOP
Download Telegram
👩‍💻 Как использовать Node.js с Docker

В этом руководстве рассказывается о преимуществах запуска приложений Node.js в контейнерах Docker и о том, как создать практичный рабочий процесс разработки.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
➡️ Введение в Popover API

В последнее время браузеры стремительно обретают довольно важные возможности. Возможности, для реализации которых могло потребоваться несколько библиотек JavaScript (или CSS), теперь доступны в браузерах из коробки.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
👩‍💻 Что такое event loop starvation в Node.js?

event loop starvation происходит, когда долгие или бесконечные операции в цикле событий блокируют выполнение других задач. Обычно это связано с асинхронными функциями, которые вызывают сами себя или используют process.nextTick() и Promise.resolve() слишком часто, задерживая другие операции, такие как таймеры и I/O.

➡️ В этом примере показано, как чрезмерное использование process.nextTick() может вызвать event loop starvation.

function starveEventLoop() {
process.nextTick(starveEventLoop); // Постоянное добавление задач в цикл событий
}

console.log('Начало');
starveEventLoop();
console.log('Конец');


🗣️ event loop starvation может вызвать зависание или замедление работы приложения. Будьте осторожны при использовании process.nextTick() и бесконечных асинхронных циклов.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
💻 Почему все говорят о Kafka?

Хочешь узнать, как обрабатывать миллионы событий в секунду и почему такие гиганты, как Netflix и Uber, без ума от Kafka? Давай разберемся, как этот инструмент может превратить поток данных в золотую жилу для твоего проекта.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
👩‍💻 Уменьшаем размер образа Docker для приложения Next.js

Как избавиться от ненужных файлов в образе докера? Выполним контейнеризацию приложения и простую оптимизацию размеров образа Docker.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
👩‍💻 5 библиотек JavaScript, которые повысят вашу эффективность

Представляем 5 полезных, но малоизвестных библиотек JavaScript! Они помогут сэкономить силы и время при форматировании дат, обработке URL-параметров и отладке веб-страниц в мобильном терминале.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 Задачка по NodeJS

Создайте небольшое приложение на Node.js, которое симулирует простой чат. Программа должна принимать два аргумента командной строки: действие (send, history) и сообщение. Программа должна сохранять все сообщения в текстовом файле (chat.txt) и уметь добавлять новые сообщения, а также выводить историю чата.

➡️ Пример:

node app.js send "Привет, как дела?" — добавляет сообщение "Привет, как дела?" в файл. • • node app.js history — выводит историю всех сообщений из файла.

Решение задачи ⬇️

const fs = require('fs');
const action = process.argv[2];
const message = process.argv[3];
const filePath = 'chat.txt';

if (!action) {
console.log('Используйте: node app.js <send|history> [message]');
process.exit(1);
}

// Функция для добавления нового сообщения
function sendMessage(message) {
const timestamp = new Date().toLocaleString();
const formattedMessage = `[${timestamp}] ${message}`;

fs.appendFile(filePath, `${formattedMessage}\n`, (err) => {
if (err) {
console.error('Ошибка при отправке сообщения:', err);
process.exit(1);
}
console.log('Сообщение отправлено.');
});
}

// Функция для вывода истории сообщений
function showHistory() {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('Ошибка чтения файла:', err);
process.exit(1);
}

const messages = data.trim().split('\n');
if (messages.length === 0 || (messages.length === 1 && messages[0] === '')) {
console.log('История чата пуста.');
} else {
console.log('История чата:');
messages.forEach((msg) => {
console.log(msg);
});
}
});
}

// Логика обработки команд
if (action === 'send') {
if (!message) {
console.log('Введите сообщение для отправки.');
} else {
sendMessage(message);
}
} else if (action === 'history') {
showHistory();
} else {
console.log('Неизвестное действие. Используйте "send" или "history".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
👩‍💻 JavaScript: различие между require и import

Ключевое слово import используется для импорта привязок, которые экспортируются другим модулем, а функция require() используется для загрузки модуля в приложении Node.js. Эти два механизма похожи, но у них есть важные отличия о которых вам следует знать. Мы обсудим их в этой статье.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
👩‍💻 4 типичные ошибки разработчиков Node.js

Растущее комьюнити Node.js - свидетельство надежности и эффективности этого инструмента. Однако не всем удается извлечь из него максимальную выгоду. Рассмотрим самые распространенные ошибки разработчиков Node.js.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🥱1
👩‍💻 8 неэффективных практик JavaScript, которых лучше избегать

Отказавшись от неэффективных практик программирования на JavaScript, вы всегда будете писать удобный и легко читаемый код. Это сэкономит вам и вашей команде много времени и обеспечит долгую жизнь вашим продуктам.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
11
👩‍💻 Как работает потокобезопасность в Node.js?

Несмотря на то, что JavaScript в Node.js однопоточный, многие операции, такие как I/O и сетевые запросы, выполняются в фоновом режиме благодаря libuv и Worker Threads. Однако нужно понимать, что операции, выполненные с использованием одних и тех же ресурсов (например, файловой системы), могут вызвать проблемы при одновременном доступе.

➡️ В этом примере показано, как можно использовать модуль worker_threads для выполнения операций в отдельном потоке.

const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
console.log('Main thread: запуск воркера');

// Создаем воркер для выполнения кода в отдельном потоке
const worker = new Worker(__filename);

worker.on('message', (message) => {
console.log(`Main thread получил: ${message}`);
});

worker.postMessage('Начни работу в воркере');
} else {
parentPort.on('message', (message) => {
console.log(`Worker получил: ${message}`);
parentPort.postMessage('Задача выполнена');
});
}


🗣️ Потокобезопасность в Node.js достигается благодаря разделению ресурсов и асинхронному подходу, однако в случаях интенсивной обработки данных можно использовать Worker Threads.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
👩‍💻 Пользовательские события CustomEvent

JavaScript CustomEvent расширяют функциональность встроенной системы событий. Проще говоря, они позволяют программистам создавать и обрабатывать события, уникальные для их приложения, и в этой статье мы расскажем о них всё.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
👩‍💻 Как преобразовать Node.js Buffer в String

При преобразовании между Buffer и String может быть указана кодировка символов. Если кодировка не указана, по умолчанию будет использоваться UTF-8

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👩‍💻 Задачка по NodeJS

Создайте приложение на Node.js, которое принимает URL в качестве аргумента командной строки, загружает HTML-контент по этому URL и сохраняет его в файл page.html. Программа должна также уметь выводить размер загруженного HTML-контента в байтах.

➡️ Пример:

node app.js download "https://example.com" — загружает страницу по указанному URL и сохраняет в файл page.html.
node app.js size "https://example.com" — выводит размер HTML-контента, загруженного по URL.

Решение задачи ⬇️

const fs = require('fs');
const https = require('https');
const url = process.argv[3];
const action = process.argv[2];
const filePath = 'page.html';

if (!action || !url) {
console.log('Используйте: node app.js <download|size> <URL>');
process.exit(1);
}

function downloadPage(url) {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});

res.on('end', () => {
fs.writeFile(filePath, data, (err) => {
if (err) {
console.error('Ошибка при сохранении страницы:', err);
process.exit(1);
}
console.log('Страница загружена и сохранена в page.html');
});
});
}).on('error', (err) => {
console.error('Ошибка загрузки страницы:', err);
process.exit(1);
});
}

function getPageSize(url) {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});

res.on('end', () => {
console.log(`Размер HTML-контента: ${Buffer.byteLength(data, 'utf8')} байт`);
});
}).on('error', (err) => {
console.error('Ошибка загрузки страницы:', err);
process.exit(1);
});
}

if (action === 'download') {
downloadPage(url);
} else if (action === 'size') {
getPageSize(url);
} else {
console.log('Неизвестное действие. Используйте "download" или "size".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎2
👩‍💻 Дата и время в JavaScript

Учимся работать с датой и временем в JavaScript: разбираемся с определением и способом создания объекта Data, его методами и форматами вывода.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
👩‍💻 Как запустить несколько приложений React на одном порту Nginx с Docker

Разместим на одном порту два приложения React с Nginx и Docker. Настроим Docker, добавим конфигурацию Nginx глобально и файл docker-compose.yml.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
1👀1
👩‍💻 Как реализовать ограничение параллельных асинхронных задач в Node.js?

При работе с асинхронными операциями, такими как запросы к API или чтение файлов, иногда нужно ограничить количество одновременно выполняемых задач, чтобы не перегружать систему. Для этого в Node.js можно использовать семафоры или библиотеки, такие как p-limit.

➡️ В этом примере мы используем библиотеку p-limit для управления количеством параллельных асинхронных задач.

const pLimit = require('p-limit');

// Создаем ограничение на 2 параллельные задачи
const limit = pLimit(2);

const asyncTask = (num) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(`Задача ${num} завершена`);
resolve();
}, 1000);
});
};

// Запускаем 5 задач с ограничением на параллельность
const tasks = [1, 2, 3, 4, 5].map((num) =>
limit(() => asyncTask(num))
);

Promise.all(tasks).then(() => {
console.log('Все задачи завершены');
});


🗣️ Ограничение параллельных задач полезно для контроля нагрузки на ресурсы. Библиотека p-limit упрощает этот процесс, предоставляя гибкое управление количеством одновременно выполняемых операций.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
👩‍💻 10 концепций JavaScript, которыми должен овладеть каждый разработчик Node.js

Статья объяснит 10 важных концепций JavaScript, которые помогут разработчикам Node.js писать эффективный и масштабируемый код. Включает темы области видимости, асинхронности и риски рекурсии.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👎9💩2👾21
⚙️ PostgreSQL Antipatterns: валим «слона» — highload на ровном месте

Сегодняшняя тема посвящена нелегким взаимоотношениям клиентского приложения и сервера PostgreSQL: как на ровном месте, неудачной архитектурой приложения, можно обеспечить себе хронические проблемы производительности.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4