
Не ходя вокруг да около, давайте приступим.
Сначала давайте обсудим общие отраслевые стандарты, но эффективные способы написания готового к использованию кода.
Строительные нормы и правила, соответствующие общим отраслевым стандартам: повышение эффективности в каждой строке.
Журналирование:
Где ошибки получают «бирку с именем», а мы играем в Шерлока с помощью кода.
Вспомним азбуки написания кода. Ведение журнала — наиболее часто используемый в отрасли метод, позволяющий всегда выявить, что отправило ваш сервер на юг! Не только 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.