Web框架性能对比Node。js篇02Express
Node.js 平台环境 Node.js v16.15.1pnpm 7.12.2
数据库 MySQL 8.x
框架/库 Express 4.18.1mysql2 2.3.3pino 8.6.1
说明
使用集群模式启动服务程序,进程数为CPU逻辑核心数量
Node.js 平台测试程序包含基本框架、数据库驱动库和日志库,数据源为数据库中的两个逻辑关联表,程序先查询表1最新的1000条数据,然后使用关联列id数组作为查询参数查询表2的数据,在程序中合并两个表的数据,最后返回给客户端。
数据库为远程线上数据库,为了与Go平台默认设置相同,数据库连接池的维持链接数量设置为0。
使用库外关联数据的原因为降低数据库参与程度,同时将测试结果用来对比在不同vm/编译器环境下各个web框架的综合性能。
创建express工程 mkdir express cd expresspnpm initpnpm add express mysql2 pino pino-pretty
代码
部分代码复用自Koa工程mkdir src cd src// logger-pino.mjs // 日志库设置 import pino from "pino"; import pretty from "pino-pretty"; export const logger = pino( pretty({ colorize: true, translateTime: true, }) );// storage-mysql.mjs // mysql2设置 import mysql from "mysql2"; export const pool = mysql.createPool({ host: process.env.DB_HOST || "localhost", port: process.env.DB_PORT || 3306, user: process.env.DB_USER || "root", password: process.env.DB_PASSWORD || "", database: process.env.DATABASE || "", waitForConnections: true, // connectionLimit: PROC * 2 + 1, // 默认10 queueLimit: 0, }); // 数据库连接参数从操作系统环境变量中读取,也可以使用dotenv库设置import express from "express"; import { pool } from "./storage-mysql.mjs"; export const app = express(); const filterSubscribers = async () => { const client = pool.promise(); const q = ` select id, uuid, name, email from billboard.common_user order by id desc limit 1000 `; const [result] = await client.query(q); return result; } const filterCvsByIds = async (ids) => { const client = pool.promise(); const q = ` select id, uuid, common_user_id, status, name, school, major, education, date_end from billboard.resume where common_user_id in (${ids}) `; const [result] = await client.query(q); return result; } app.route("/octo-api/cv") .get(async (req, res) => { const subscribers = await filterSubscribers(); const ids = subscribers.map((s) => s.id); const cvs = await filterCvsByIds(ids.join(",")); const list = cvs.map((c) => { const subscriber = subscribers.filter((s) => s["id"] === c["common_user_id"]); if (subscriber && subscriber.length > 0) { c["subscriber"] = subscriber[0]; } return c; }); res.json(list); });import cluster, { isMaster } from "cluster"; import http from "http"; import { logger } from "./logger-pino.mjs"; const port = parseInt(process.env.PORT, 10) || 8421; if (isMaster) { logger.info(`主进程 PID:${process.pid}`); for (let i = 0; i < parseInt(process.env.PROC || 1, 10); i += 1) { cluster.fork(); } cluster.on("online", (worker) => { logger.info(`子进程 PID:${worker.process.pid}, 端口:${port}`); }); cluster.on("exit", (worker, code, signal) => { logger.error(`子进程 PID:${worker.process.pid}终止,错误代码:${code},信号:${signal}`); logger.info(`由主进程(PID:${process.pid})创建新的子进程`); cluster.fork(); }); } else { import("./app.mjs").then(({ app }) => { http.createServer(app).listen(port); }); }// package.json { "scripts": { "dev": "node src/server.mjs" } }
启动程序pnpm run dev
耕读教育,为双减注入新活力浙江省台州市仙居县白塔镇第二小学的学生在老师指导下学习栽种秧苗。王华斌摄光明图片江苏省如皋市搬经镇搬经小学举行的劳动技能比赛。徐慧摄光明图片湖北省恩施清江外国语学校的小学生在宣恩县
大成基金苏秉毅构建中西医结合式的投研体系资本市场浮浮沉沉,有人一战成名,有人黯然离场,也有人一直默默耕耘。作为一名深耕公募基金近20年的老将,大成基金指数与期货投资部副总监基金经理苏秉毅日前在接受中国证券报记者专访时表示
全国机动车保有量达4。12亿辆,新能源保有量超千万辆10月8日,公安部发布最新的机动车保有量统计数据,截至2022年9月底,全国机动车保有量达4。12亿辆,其中汽车3。15亿辆,第三季度汽车月均新增量平均明显高于上半年。截至9月底,
5。6万元的顶级尤物!ROG冰刃6双屏笔记本评测锐龙990W暴力输出一前言ROG冰刃6双屏笔记本顶级性能配顶级双屏这几年,华硕在双屏笔记本上颇有心得,产品也越来越丰富越来越高级,包括冰刃双屏系列灵耀双屏系列。去年,我们曾经体验过采用锐龙95900H
RedmiK60系列将加入无线充电,进一步补齐短板10月9日,微博数码博主数码闲聊站昨日曝光了两款骁龙8手机的充电规格,分别搭载67W有线闪充30W无线闪充和120W有线闪充30W无线闪充,有消息表示这两款机型或为RedmiK60
荣耀X40GT发布会官宣,10月13日发布10月9日消息,在今日,荣耀手机官方在社交平台上宣布,旗下全新产品荣耀X40GT5G的新品发布会将会在10月13日召开,官方宣称其拥有性能跃级标杆。荣耀在社交平台上发布了一张海报,
行业追捧的MiniLED到底是怎么样的显示技术发展到今天这个阶段的话,其实大家追求的都是越来越细腻的画面。那越来越细腻的画面是怎么达到呢?一方面在一些人追捧的OLED,它确实能够达到像素点级别的一个控光,但是OLED却
老蛙微距电影镜头65mmT2。92倍放大倍率画质怎么样?最近两年老蛙一直在电影镜头领域发力,而结合之前就广受好评的老蛙微距系列镜头的优势,这次推出的2支2倍微距电影镜头可谓是老蛙产品线上极具重量性的产品。之前我们已经做过全画幅100mm
鉴赏LGHU915QEG实现亮度色彩与HDR性能飞跃激光电视或者说激光超短焦投影机的出现,让沉闷的客厅大屏市场掀起了不少的波澜,巧妙地解决了如何将源于高端商业影院中的激光放映技术,引入到庞大的客厅大屏市场中的难题,让普通用户也可以在
哈啰被指泄漏用户信息,臻有钱遭大量投诉黑猫投诉平台上,近来多了不少对臻有钱的投诉,其中相当一部分是指责哈啰泄漏用户信息,导致自己遭到臻有钱的贷款短信或电话骚扰。而哈啰客服的回复一概都是,为尽快解决投诉者的问题,请尽快致
河北最新通知!事关供热用热事关河北省居民供热用热河北省住房和城乡建设厅发布最新通知关于对河北省居民供热用热合同示范文本(征求意见稿)公开征求意见的通知进一步规范供热用热行为,维护供热用热双方合法权益,按照河