一文搞懂:使用throng运行express应用

简介: 一文搞懂:使用throng运行express应用

"

参考了heroku的一个demo,同时集成了perf

环境准备

package.json

{

""name"": ""nodejs-throng"",

""version"": ""1.0.0""//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQxMTM4NA==.html

,

""main"": ""index.js"",

""license"": ""MIT"",

""dependencies"": {

""crypto"": ""^1.0.1"",

""express"": ""^4.17.1"",

""throng"": ""^5.0.0""

}

}

app.js

const throng = require('throng')

const WORKERS = process.env.WEB_CONCURRENCY || 2

const PORT = process.env.PORT || 8080

?

throng(WORKERS, start)

?

function start(workid) {

console.log('Starting:',workid)

const crypto = require('crypto')

const express = require('express')

const app = express()

?

app

.get('/cpu', cpuBound)

.get('/memory', memoryBound)

.get('/io', ioBound)

.get('/', hello)

.listen(PORT, onListen)

?

function hello(req, res, next) {

console.log('workid:',workid)

res.send('Hello, world')

}

?

function cpuBound(req, res, next) {

console.log('workid:',workid)

const key = Math.random() < 0.5 ? 'ninjaturtles' : 'powerrangers'

const hmac = crypto.createHmac('sha512WithRSAEncryption', key)

const date = Date.now() + ''

hmac.setEncoding('base64')

hmac.end(date, () => res.send('A //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1NDMyMA==.html

hashed date for you! ' + hmac.read()))

}

?

function memoryBound(req, res, next) {

console.log('workid:',workid)

const large = Buffer.alloc(10 1024 1024, 'X')

setTimeout(() => {

const len = large.length // close over the Buffer for 1s to try to foil V8's optimizations and bloat memory

console.log(len)

}, 1000).unref()

res.send('Allocated 10 MB buffer')

}

?

function ioBound(req, res, next) {

console.log('workid:',workid)

setTimeout(function SimulateDb() {

res.send('Got response from fake db!')

}, 300).unref()

}

?

function onListen() {

console.log('Listening on', PORT)

}

}

perf

perf record -e cycles:u -g -- node --perf-basic-prof --perf-prof-unwinding-info app.js

火焰图

可以使用flamescope

运行的多进程效果

说明

最好的对比就是通过不同模式的对比火焰图

参考资料


"
image.png
相关文章
|
8月前
|
开发工具 git
如何运行github上面的node+express项目
如何运行github上面的node+express项目
122 0
|
9月前
88 # express 应用和路由的分离
88 # express 应用和路由的分离
21 0
|
9月前
87 # express 应用和创建应用的分离
87 # express 应用和创建应用的分离
15 0
|
6天前
|
JSON JavaScript 中间件
Express.js:构建轻量级Node.js应用的基石
**Express.js 概览**:作为Node.js首选Web框架,Express以其轻量、灵活和强大的特性深受喜爱。自2009年以来,其简洁设计和丰富中间件支持引领开发者构建定制化应用。快速开始:使用`express-generator`创建项目,安装依赖,启动应用。示例展示如何添加返回JSON消息的GET路由。Express适用于RESTful API、实时应用等多种场景,社区支持广泛,助力高效开发。
11 1
|
2月前
|
JavaScript 前端开发
nodejs配置express服务器,运行后自动打开浏览器
作为前端开发的项目,有的时候打包完后就想在本地测试是什么样子的,另外一些如cesium等程序,需要在服务的环境下才能启动三维球等。 这里使用nodejs+express搭建一个普通的服务器。
nodejs配置express服务器,运行后自动打开浏览器
|
9月前
|
弹性计算 开发框架 JavaScript
SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上试读版
SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上试读版
|
11月前
|
前端开发 JavaScript NoSQL
基于 Express 应用框架的技术方案选型浅谈
基于 Express 应用框架的技术方案选型浅谈
95 3
|
JavaScript 前端开发 中间件
前端需要去了解的nodejs知识(express应用搭建)
这是一个使用typescript和express的应用框架,快速搭建服务端项目。主要模块可以拆分为入口、路由、数据、工具、服务、业务。
使用express-generator生成express应用
使用express-generator生成express应用
40 0
|
机器学习/深度学习 JSON JavaScript
Express应用迁移 | 学习笔记
快速学习Express应用迁移
95 0
Express应用迁移 | 学习笔记