Как улучшить производительность приложения Node Js на стороне сервера с помощью простых методов

Вы работали над потрясающим приложением на node.js, но, возможно, ваше приложение работает медленно, и вы задумались о том, как улучшить производительность вашего приложения. К счастью для вас, в этом руководстве мы рассмотрим, как можно улучшить производительность приложения node js с помощью этих вездесущих техник.
Существует множество способов улучшить производительность вашего приложения node.js, но в этом руководстве мы сосредоточимся на сжатии и кэш-менеджере.

Сжатие

Сжатие помогает уменьшить объем данных ответа приложения Nodejs перед отправкой их клиентскому приложению для потребления. Это значительно повышает производительность приложения, и в результате клиентскому приложению требуется меньше времени для получения ответа, так как объем полезной нагрузки ответа значительно уменьшается.
В нашем Nodejs-приложении мы можем легко использовать сжатие, установив его из npm.

npm install compression
Вход в полноэкранный режим Выйти из полноэкранного режима

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

const compression = require("compression");
const express = require("express");
const app = express();
// this will compress all responses
app.use(compression())

Вход в полноэкранный режим Выход из полноэкранного режима

Кэширование

Кэширование — это процесс хранения часто используемых данных во временном хранилище. Кэширование — это отличный способ повысить производительность приложения, так как временные данные из кэша могут быть получены быстрее, что снижает пропускную способность и количество обращений к базе данных. Если приложение имеет большое количество пользователей, необходимо кэшировать данные, к которым часто обращаются пользователи. Кэширование может осуществляться на стороне сервера и на стороне клиента, но в этой статье мы сосредоточимся только на кэшировании на стороне сервера.
Существует множество библиотек для кэширования в node js, таких как cache-manager, redis cache, memcacahed, node-cache и т.д., но мы будем использовать cache-manager для реализации кэширования на стороне сервера.

Преимущества использования cache-manager

Cache-manager имеет множество преимуществ, которые включают в себя;

  • Он включает функцию wrap, которая позволяет вам обернуть любую функцию в кэш.

  • Он имеет встроенный кэш памяти (с использованием node-lru-cache), со стандартными функциями, которые вы ожидаете увидеть в большинстве кэшей; set, get, mset, mget, del

  • Он позволяет настроить многоуровневую стратегию кэширования. В большинстве случаев это может иметь ограниченное применение, но представьте себе сценарий, когда вы ожидаете большой трафик и не хотите обращаться к своему основному кэшу (например, Redis) при каждом запросе. Вы решаете хранить наиболее часто запрашиваемые данные в кэше in-memory, возможно, с очень коротким тайм-аутом и/или небольшим ограничением на размер данных.

  • Она позволяет получать и устанавливать несколько ключей одновременно для кэширующих хранилищ, которые ее поддерживают. Это означает, что при получении нескольких ключей он будет проходить через различные кэши, начиная с самого приоритетного (см. раздел «Мультихранилище» ниже), и объединять значения, найденные на каждом уровне.
    Подробнее о кэш-менеджере читайте здесь

Базовая реализация кэш-менеджера

Для реализации кэш-менеджера необходимо установить пакет из npm с помощью команды

npm install cache-manager
Войти в полноэкранный режим Выйти из полноэкранного режима
const cacheManager = require('cache-manager');
const memoryCache = cacheManager.caching({store: 'memory', max: 100, ttl: 10/*seconds*/});
var ttl = 5;
// Note: callback is optional in set() and del().
// Note: memory cache clones values before setting them unless
// shouldCloneBeforeSet is set to false

memoryCache.set('foo', 'bar', {ttl: ttl}, function(err) {
    if (err) { throw err; }

    memoryCache.get('foo', function(err, result) {
        console.log(result);
        // >> 'bar'
        memoryCache.del('foo', function(err) {});
    });
});

function getUser(id, cb) {
    setTimeout(function () {
        console.log("Returning user from slow database.");
        cb(null, {id: id, name: 'Bob'});
    }, 100);
}

var userId = 123;
var key = 'user_' + userId;

// Note: ttl is optional in wrap()
memoryCache.wrap(key, function (cb) {
    getUser(userId, cb);
}, {ttl: ttl}, function (err, user) {
    console.log(user);

    // Second time fetches user from memoryCache
    memoryCache.wrap(key, function (cb) {
        getUser(userId, cb);
    }, function (err, user) {
        console.log(user);
    });
});

// Outputs:
// Returning user from slow database.
// { id: 123, name: 'Bob' }
// { id: 123, name: 'Bob' }
Войти в полноэкранный режим Выйти из полноэкранного режима

Чтобы реализовать нашу полную систему кэширования node.js express API с помощью cache-manager, вы можете посмотреть видеоурок ниже.

В видео ниже (см. внизу) я рассказал о сжатии и полной реализации нашей системы кэширования.

Что вы узнаете;

  • Почему важно сжимать ответ нашего сервера
  • Как эффективно реализовать кэш-систему для повышения производительности вашего node.js-приложения.
  • Как повысить производительность вашего node.js-приложения без использования redis db.

Заключение

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

Я веду канал на youtube, известный как TechFortified, где я публикую удивительный технический контент. Пожалуйста, не забывайте ставить лайки, комментировать, подписываться и включать уведомления, чтобы получать больше удивительных видео, подобных этому. Спасибо.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *