[JavaScript + C ++]: программирование, ориентированное на производительность

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

Чтобы справиться с большими объемами трафика, основной способ - добавить больше серверов приложений. Этот подход не всегда является жизнеспособным, поскольку он увеличивает стоимость. Альтернативный способ - повысить эффективность существующего приложения, чтобы оно могло обрабатывать больше трафика с помощью существующих ресурсов.

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

Node может обрабатывать больше запросов, используя меньше ресурсов по сравнению с традиционными языками программирования.

Node.js с C ++

C / C ++ - это не только основа всех современных языков программирования, но и один из самых быстрых языков программирования. Node предоставляет уникальный способ выполнения кода C ++ в приложении JavaScript с помощью надстроек Node.js.

Аддоны Node.js - это динамически связанные общие объекты, написанные на C ++, которые могут быть загружены в Node.js с помощью функции require() и использоваться так же, как если бы они были обычным модулем Node.js. Они используются в основном для обеспечения интерфейса между JavaScript, работающим в Node.js, и библиотеками C / C ++.

Ниже приведены причины использования надстроек Node.js.

  1. Повысьте производительность приложений и эффективное использование оборудования.
  2. Доступ к собственным API-интерфейсам, которые затруднены при использовании только JS.
  3. Интегрируйте стороннюю библиотеку, написанную на C ++, в javascript.

В этом посте мы собираемся рассчитать улучшение производительности JavaScript после интеграции надстройки C ++.

Давайте начнем

  1. Следуйте инструкциям по установке, чтобы установить node-gyp здесь.

Создайте папку «loop_addon»

mkdir loop_addon && cd loop_addon

Создайте файл «binding.gyp» и поместите приведенный ниже код. Этот файл содержит конфигурацию для наших надстроек Node.js.

{
   "targets": [
       {
          "target_name": "loop_addon",
          "sources": ["loop_addon.cc"]
       }
    ]
}

Создайте файл «loop_addon.cc», разместив его ниже.

Обратите внимание, что все надстройки Node.js должны экспортировать функцию инициализации в соответствии с шаблоном, указанным ниже:

void init(Local<Object> exports);
NODE_MODULE(NODE_GYP_MODULE_NAME, init)

После NODE_MODULE точки с запятой не ставится, поскольку это не функция.

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

node-gyp configure && node-gyp build

Создайте файл «loop_addon.js» в корневом каталоге.

В приведенном выше коде мы импортируем двоичные файлы нашего аддона C ++. Мы также создали функцию в JavaScript countSum (), которая включает ту же логику, что и C ++. Мы выполняем цикл while 1 миллиард раз. Используя функцию console.time (), мы вычисляем время, затрачиваемое каждой функцией.

Запустите приведенный выше код, запустив команду ниже.

node loop_addon.js

Скрестите пальцы🤞 и ждите результатов… ..

Результаты очень удивительны. Наш цикл JavaScript занимает ~ 1515,06 мс, чтобы пройти 1 миллиард раз. С другой стороны, наш код C ++ с той же логикой занимал ~ 0,056 мс. Следовательно, вы можете увидеть значительное улучшение производительности после использования надстроек C ++.

Разве это не впечатляет? Гибкость JavaScrpit и скорость C ++ в сочетании друг с другом могут стать рентабельным решением для повышения производительности на современных веб-сайтах с высокой посещаемостью.

Посетите репозиторий GitHub здесь.