В этом руководстве рассказывается о преимуществах запуска приложений Node.js в контейнерах Docker и о том, как создать практичный рабочий процесс разработки.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
В последнее время браузеры стремительно обретают довольно важные возможности. Возможности, для реализации которых могло потребоваться несколько библиотек JavaScript (или CSS), теперь доступны в браузерах из коробки.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
event loop starvation происходит, когда долгие или бесконечные операции в цикле событий блокируют выполнение других задач. Обычно это связано с асинхронными функциями, которые вызывают сами себя или используют
process.nextTick()
и Promise.resolve()
слишком часто, задерживая другие операции, такие как таймеры и I/O.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
👍2❤1
Хочешь узнать, как обрабатывать миллионы событий в секунду и почему такие гиганты, как Netflix и Uber, без ума от Kafka? Давай разберемся, как этот инструмент может превратить поток данных в золотую жилу для твоего проекта.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Как избавиться от ненужных файлов в образе докера? Выполним контейнеризацию приложения и простую оптимизацию размеров образа Docker.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Представляем 5 полезных, но малоизвестных библиотек JavaScript! Они помогут сэкономить силы и время при форматировании дат, обработке URL-параметров и отладке веб-страниц в мобильном терминале.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Создайте небольшое приложение на 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
Ключевое слово
import
используется для импорта привязок, которые экспортируются другим модулем, а функция require()
используется для загрузки модуля в приложении Node.js. Эти два механизма похожи, но у них есть важные отличия о которых вам следует знать. Мы обсудим их в этой статье.Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Растущее комьюнити Node.js - свидетельство надежности и эффективности этого инструмента. Однако не всем удается извлечь из него максимальную выгоду. Рассмотрим самые распространенные ошибки разработчиков Node.js.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🥱1
Отказавшись от неэффективных практик программирования на JavaScript, вы всегда будете писать удобный и легко читаемый код. Это сэкономит вам и вашей команде много времени и обеспечит долгую жизнь вашим продуктам.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1⚡1
Несмотря на то, что 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
👍5❤1
• Связываем форму сайта с Telegram-ботом на чистом JavaScript за 15 минут: Полная разработка и деплой
• Как подружить GLPI с Node Js Часть 1. (Выбор основного подхода)
• Создатель Vue Evan You поднимает $4.6 миллиона на новом проекте
• Vike — современный SSR-фреймворк
• Укрепляем сплочённость, открытость и командный дух с помощью Figma-проекта
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
JavaScript CustomEvent расширяют функциональность встроенной системы событий. Проще говоря, они позволяют программистам создавать и обрабатывать события, уникальные для их приложения, и в этой статье мы расскажем о них всё.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
При преобразовании между Buffer и String может быть указана кодировка символов. Если кодировка не указана, по умолчанию будет использоваться UTF-8
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Создайте приложение на 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: разбираемся с определением и способом создания объекта Data, его методами и форматами вывода.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Разместим на одном порту два приложения React с Nginx и Docker. Настроим Docker, добавим конфигурацию Nginx глобально и файл docker-compose.yml.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👀1
При работе с асинхронными операциями, такими как запросы к 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
👍3❤1
Статья объяснит 10 важных концепций JavaScript, которые помогут разработчикам Node.js писать эффективный и масштабируемый код. Включает темы области видимости, асинхронности и риски рекурсии.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👎9💩2👾2❤1
Сегодняшняя тема посвящена нелегким взаимоотношениям клиентского приложения и сервера PostgreSQL: как на ровном месте, неудачной архитектурой приложения, можно обеспечить себе хронические проблемы производительности.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4