[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.
- Повысьте производительность приложений и эффективное использование оборудования.
- Доступ к собственным API-интерфейсам, которые затруднены при использовании только JS.
- Интегрируйте стороннюю библиотеку, написанную на C ++, в javascript.
В этом посте мы собираемся рассчитать улучшение производительности JavaScript после интеграции надстройки C ++.
Давайте начнем
Создайте папку «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 здесь.