feat: framework benchmark (#2915)
* feat: framework benchmark * feat: add readme doc * feat: koa-resourcer * fix: doc * fix: wrk * feat: actions
This commit is contained in:
parent
e35e4af5e7
commit
3b02c6e6e1
@ -27,3 +27,4 @@ packages/core/cli/templates/plugin/src/client/*.tpl
|
||||
packages/app/client/src/.plugins
|
||||
docker
|
||||
storage
|
||||
benchmark
|
37
benchmark/README.md
Normal file
37
benchmark/README.md
Normal file
@ -0,0 +1,37 @@
|
||||
## koa-database
|
||||
|
||||
```bash
|
||||
yarn pm2 start benchmark/koa-database/index.js --name koa-database
|
||||
wrk -t20 -c20 -d20s http://localhost:13010/
|
||||
```
|
||||
|
||||
## koa-sequelize
|
||||
|
||||
```bash
|
||||
yarn pm2 start benchmark/koa-sequelize/index.js --name koa-sequelize
|
||||
wrk -t20 -c20 -d20s http://localhost:13020/
|
||||
```
|
||||
|
||||
## nocobase-server
|
||||
|
||||
```bash
|
||||
yarn pm2 start benchmark/nocobase-server/index.js --name nocobase-server
|
||||
wrk -t20 -c20 -d20s http://localhost:13030/api/users
|
||||
```
|
||||
|
||||
## koa-resourcer
|
||||
|
||||
```bash
|
||||
yarn pm2 start benchmark/koa-resourcer/index.js --name koa-resourcer
|
||||
wrk -t20 -c20 -d20s http://localhost:13040/api/users
|
||||
```
|
||||
|
||||
## nocobase-app
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
yarn build
|
||||
yarn nocobase install
|
||||
yarn start
|
||||
wrk -t20 -c20 -d20s http://localhost:13000/api/users?token=
|
||||
```
|
85
benchmark/koa-database/index.js
Normal file
85
benchmark/koa-database/index.js
Normal file
@ -0,0 +1,85 @@
|
||||
const Koa = require('koa');
|
||||
const { Database } = require('@nocobase/database');
|
||||
|
||||
const dotenv = require('dotenv');
|
||||
dotenv.config();
|
||||
|
||||
const db = new Database({
|
||||
logging: false,
|
||||
dialect: process.env.DB_DIALECT,
|
||||
storage: process.env.DB_STORAGE,
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
timezone: process.env.DB_TIMEZONE,
|
||||
tablePrefix: process.env.DB_TABLE_PREFIX,
|
||||
schema: process.env.DB_SCHEMA,
|
||||
underscored: process.env.DB_UNDERSCORED === 'true',
|
||||
});
|
||||
|
||||
db.collection({
|
||||
name: 'users',
|
||||
sortable: 'sort',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
type: 'bigInt',
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
allowNull: false,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'nickname',
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'username',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'email',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'phone',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'password',
|
||||
name: 'password',
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'appLang',
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'resetToken',
|
||||
unique: true,
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
type: 'json',
|
||||
name: 'systemSettings',
|
||||
defaultValue: {},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const app = new Koa();
|
||||
|
||||
app.use(async (ctx, next) => {
|
||||
const repository = db.getRepository('users');
|
||||
ctx.body = await repository.find();
|
||||
await next();
|
||||
});
|
||||
|
||||
app.listen(13010, () => {
|
||||
console.log('koa-database: http://localhost:13010/');
|
||||
});
|
106
benchmark/koa-resourcer/index.js
Normal file
106
benchmark/koa-resourcer/index.js
Normal file
@ -0,0 +1,106 @@
|
||||
const Koa = require('koa');
|
||||
const { Database } = require('@nocobase/database');
|
||||
const { middlewares } = require('@nocobase/server');
|
||||
const { Resourcer } = require('@nocobase/resourcer');
|
||||
|
||||
const dotenv = require('dotenv');
|
||||
const { list, get } = require('@nocobase/actions/lib/actions');
|
||||
dotenv.config();
|
||||
|
||||
const db = new Database({
|
||||
logging: false,
|
||||
dialect: process.env.DB_DIALECT,
|
||||
storage: process.env.DB_STORAGE,
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
timezone: process.env.DB_TIMEZONE,
|
||||
tablePrefix: process.env.DB_TABLE_PREFIX,
|
||||
schema: process.env.DB_SCHEMA,
|
||||
underscored: process.env.DB_UNDERSCORED === 'true',
|
||||
});
|
||||
|
||||
db.collection({
|
||||
name: 'users',
|
||||
sortable: 'sort',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
type: 'bigInt',
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
allowNull: false,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'nickname',
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'username',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'email',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'phone',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'password',
|
||||
name: 'password',
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'appLang',
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'resetToken',
|
||||
unique: true,
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
type: 'json',
|
||||
name: 'systemSettings',
|
||||
defaultValue: {},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const app = new Koa();
|
||||
const resourcer = new Resourcer({
|
||||
prefix: '/api',
|
||||
});
|
||||
|
||||
resourcer.define({
|
||||
name: 'users',
|
||||
actions: {
|
||||
list,
|
||||
get,
|
||||
// async list(ctx, next) {
|
||||
// const repository = db.getRepository('users');
|
||||
// ctx.body = await repository.find();
|
||||
// await next();
|
||||
// },
|
||||
},
|
||||
});
|
||||
|
||||
// resourcer.registerActionHandlers({ list });
|
||||
|
||||
app.use(async (ctx, next) => {
|
||||
ctx.db = db;
|
||||
await next();
|
||||
});
|
||||
app.use(resourcer.restApiMiddleware());
|
||||
// app.use(middlewares.db2resource);
|
||||
app.listen(13040, () => {
|
||||
console.log('koa-resourcer: http://localhost:13040/api/users');
|
||||
});
|
44
benchmark/koa-sequelize/index.js
Normal file
44
benchmark/koa-sequelize/index.js
Normal file
@ -0,0 +1,44 @@
|
||||
const Koa = require('koa');
|
||||
const { Sequelize, DataTypes } = require('sequelize');
|
||||
const dotenv = require('dotenv');
|
||||
|
||||
dotenv.config();
|
||||
|
||||
const sequelize = new Sequelize({
|
||||
dialect: process.env.DB_DIALECT,
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
logging: false,
|
||||
});
|
||||
|
||||
const User = sequelize.define(
|
||||
'users',
|
||||
{
|
||||
nickname: DataTypes.STRING,
|
||||
username: {
|
||||
type: DataTypes.STRING,
|
||||
unique: true,
|
||||
},
|
||||
email: {
|
||||
type: DataTypes.STRING,
|
||||
unique: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
underscored: true,
|
||||
},
|
||||
);
|
||||
|
||||
const app = new Koa();
|
||||
|
||||
app.use(async (ctx, next) => {
|
||||
ctx.body = await User.findAll();
|
||||
await next();
|
||||
});
|
||||
|
||||
app.listen(13020, () => {
|
||||
console.log('koa-sequelize: http://localhost:13020/');
|
||||
});
|
83
benchmark/nocobase-server/index.js
Normal file
83
benchmark/nocobase-server/index.js
Normal file
@ -0,0 +1,83 @@
|
||||
const { Application } = require('@nocobase/server');
|
||||
const dotenv = require('dotenv');
|
||||
|
||||
dotenv.config();
|
||||
|
||||
const app = new Application({
|
||||
database: {
|
||||
logging: false,
|
||||
dialect: process.env.DB_DIALECT,
|
||||
storage: process.env.DB_STORAGE,
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT,
|
||||
timezone: process.env.DB_TIMEZONE,
|
||||
tablePrefix: process.env.DB_TABLE_PREFIX,
|
||||
schema: process.env.DB_SCHEMA,
|
||||
underscored: process.env.DB_UNDERSCORED === 'true',
|
||||
},
|
||||
resourcer: {
|
||||
prefix: '/api',
|
||||
},
|
||||
acl: false,
|
||||
plugins: [],
|
||||
});
|
||||
|
||||
app.db.collection({
|
||||
name: 'users',
|
||||
sortable: 'sort',
|
||||
fields: [
|
||||
{
|
||||
name: 'id',
|
||||
type: 'bigInt',
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
allowNull: false,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'nickname',
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'username',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'email',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'phone',
|
||||
unique: true,
|
||||
},
|
||||
{
|
||||
type: 'password',
|
||||
name: 'password',
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'appLang',
|
||||
},
|
||||
{
|
||||
type: 'string',
|
||||
name: 'resetToken',
|
||||
unique: true,
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
type: 'json',
|
||||
name: 'systemSettings',
|
||||
defaultValue: {},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
app.listen(13030, (err) => {
|
||||
console.log('nocobase-server: http://localhost:13030/api/users');
|
||||
});
|
Loading…
Reference in New Issue
Block a user