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