Не ходя вокруг да около, давайте приступим.

Сначала давайте обсудим общие отраслевые стандарты, но эффективные способы написания готового к использованию кода.

Строительные нормы и правила, соответствующие общим отраслевым стандартам: повышение эффективности в каждой строке.

Журналирование:

Где ошибки получают «бирку с именем», а мы играем в Шерлока с помощью кода.

Вспомним азбуки написания кода. Ведение журнала — наиболее часто используемый в отрасли метод, позволяющий всегда выявить, что отправило ваш сервер на юг! Не только NodeJS, но и любой серверный язык имеет полную поддержку библиотек журналирования.

  • Используйте библиотеку журналирования (например, Winston, Bunyan) для регистрации событий и ошибок приложения.
  • Записывайте значимую информацию на разных уровнях (информация, отладка, ошибка), чтобы помочь в устранении неполадок.

Пример -

const winston = require('winston');

// Create a logger instance
const logger = winston.createLogger({
  level: 'info', // Log level
  format: winston.format.simple(), // Log format
  transports: [
    new winston.transports.Console(), // Log to the console
    new winston.transports.File({ filename: 'app.log' }) // Log to a file
  ]
});

// Log some messages
logger.log('info', 'This is an info message.');
logger.log('error', 'This is an error message.');

Кэширование:

Потому что кто захочет дважды совершить одно и то же путешествие в мире кода!

Еще раз вспомните азбуки написания кода. Всякий раз, когда из базы данных запрашиваются общие данные, предпочитайте, чтобы они были кэшированы, чтобы сэкономить время на запрос к нашей базе данных.
Проще говоря,кэшируйте общие данные, чтобы сэкономить ценное время запросов к базе данных.

  • Кэширование повышает производительность за счет хранения часто используемых данных в памяти.
  • Можно использовать Redis,в настоящее время наиболее используемое решение для кэширования в отрасли согласно современным тенденциям.

Пример кэширования в NodeJS —

const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: 3600 }); // Cache with a 1-hour TTL

function fetchDataFromAPI(key) {
  const cachedData = cache.get(key);
  if (cachedData) {
    console.log('Data retrieved from cache');
    return cachedData;
  } else {
    // Fetch data from the API
    const data = /* ... fetch data from API ... */;
    cache.set(key, data);
    console.log('Data fetched from API and cached');
    return data;
  }
}

// Usage
const result1 = fetchDataFromAPI('cache-key-1');
const result2 = fetchDataFromAPI('cache-key-2');

Индексирование:

Спаситель для навигации по огромным базам данных и поиска пользовательских данных «иголки в стоге сена»

Кэширования может быть недостаточно для извлечения пользовательских данных из огромной базы данных. Именно здесь индексация становится спасителем.

Пример индексации MongoDB в NodeJS —

// Create an index on the 'email' field for faster queries
const collection = db.collection('users');
collection.createIndex({ email: 1 });

Выйдя за рамки основ: советы Node.js для профессиональных разработчиков.

Давайте обсудим советы, специфичные для NodeJS, для готового к использованию кода.

Когда следует выбирать Node.js?

Не плывите на модной волне, оседлайте правильную волну технологий!

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

Когда использовать:

  • Приложения реального времени
  • API и микросервисы

Когда не использовать:

  • Задачи с интенсивным использованием процессора
  • Большие механизмы рендеринга

Асинхронный/Ожидание:

Синхронизация асинхронного танца: наведение порядка в JavaScript с помощью элегантности async/await.

Хотя JavaScript является асинхронным, иногда нам необходимо писать код синхронно. Например, чтобы выполнить ряд действий после ответа API.

async function fetchData() {
  try {
    const response = await fetch('https://example.com/api/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('Error fetching data:', error);
    throw error;
  }
}

// Usage
fetchData()
  .then(data => {
    console.log('Data fetched successfully:', data);
  })
  .catch(error => {
    console.error('Error in data fetch:', error);
  });

Использование TypeScript:

TypeScript: разумный способ поддерживать правильную динамику ваших данных.

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

  • Статическая типизация: TypeScript обеспечивает статическую типизацию, заранее обнаруживая ошибки.
  • Вывод типа. Уменьшите необходимость в явных аннотациях типов.

Пример -

function greet(name: string): string {
  return `Hello, ${name}!`;
}

const personName: string = "John";
console.log(greet(personName));

Использование потоков:

«Потоки Node.js: где данные текут рекой, сохраняя драгоценные береговые линии оперативной памяти».

  • Они позволяют вам читать или записывать данные по частям, а не загружать весь набор данных в память.
  • Потоки особенно полезны для обработки больших файлов, сетевого взаимодействия и обработки данных в реальном времени.
const fs = require('fs');

const sourceStream = fs.createReadStream('source.txt');
const destinationStream = fs.createWriteStream('destination.txt');

sourceStream.pipe(destinationStream);

console.log('File copied successfully.');

Разнообразный :

  • Внедрите надежную обработку ошибок, чтобы корректно управлять сбоями в своем коде.
  • Использование сжатия Gzip может уменьшить объем данных, передаваемых по сети, что приводит к сокращению времени отклика и снижению использования полосы пропускания.
  • Выберите правильный тип API REST или GraphQL.