Skip to content

Commit

Permalink
Add more code to perf benchmark
Browse files Browse the repository at this point in the history
Also run deno fmt, and reorganize it into a chiselc directory
  • Loading branch information
Glauber Costa authored and mergify[bot] committed Jun 15, 2022
1 parent 875df86 commit ab34a2e
Show file tree
Hide file tree
Showing 16 changed files with 133 additions and 33 deletions.
20 changes: 0 additions & 20 deletions perf/backend/endpoints/fixture.ts

This file was deleted.

15 changes: 13 additions & 2 deletions perf/README.md → perf/chiselc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,30 @@ Start ChiselStrike server:
cd backend && ../../target/release/chisel dev
```

Generate some test data:
Generate some test data, 1000 elements

```console
curl -X POST localhost:8080/dev/fixture
curl -X POST localhost:8080/dev/fixture/1000
```
Generate the needle elements to be found

```console
curl -X POST localhost:8080/dev/needle
```



Benchmark the three versions:
* array: converts the whole thing to an array and then find inside the array
* base: iterates through the asynchronous iterator
* bench: just write the lambda
* inline-validate: perform inline validation of the email
* explicit-validate: perform explicit validation of the email on the result of the search

```console
ab -c -n 100 localhost:8080/dev/array
ab -c -n 100 localhost:8080/dev/base
ab -c -n 100 localhost:8080/dev/bench
ab -c -n 100 localhost:8080/dev/inline-validate
ab -c -n 100 localhost:8080/dev/explicit-validate
```
File renamed without changes.
2 changes: 2 additions & 0 deletions perf/backend/Chisel.toml → perf/chiselc/backend/Chisel.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ models = ["models"]
endpoints = ["endpoints"]
policies = ["policies"]
modules = "node"
auto_index = "yes"
optimize = "yes"
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { User } from "../models/user";

export default async function (req: Request): Promise<Response> {
const all = await User.findAll();
const user = all.find(user => user.name == "Glauber Costa" && user.age >= 40);
const user = all.find((user) =>
user.name == "Glauber Costa" && user.age >= 40
);
return new Response(user?.email ?? "not found");
}
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { User } from "../models/user";

export default async function (req: Request): Promise<Response> {
const user = await User.findOne(user => user.name == "Glauber Costa" && user.age >= 40);
const user = await User.findOne((user) =>
user.name == "Glauber Costa" && user.age >= 40
);
return new Response(user?.email ?? "not found");
}
9 changes: 9 additions & 0 deletions perf/chiselc/backend/endpoints/explicit-validate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { User } from "../models/user";
import { validate } from "email-validator";

export default async function (req: Request): Promise<Response> {
const user = await User.findOne((user) =>
user.name == "Glauber Costa" && user.age >= 40
);
return new Response(validate(user?.email) ? user.email : "not found");
}
50 changes: 50 additions & 0 deletions perf/chiselc/backend/endpoints/fixture.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { faker } from "@faker-js/faker";

import { User } from "../models/user";

function randomInt(min: number, max: number) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}

// call fixture/<number> to generate <number> entries
export default async function (req: ChiselRequest): Promise<Response> {
const rr = req.pathParams;
const parsed = parseInt(req.pathParams);
const populationSize = isNaN(parsed) ? 0 : parsed;

const glauberPos = randomInt(0, populationSize);
const glauberJrPos = randomInt(0, populationSize);

const promises = [];
for (let i = 0; i < populationSize; i++) {
promises.push(User.create({
name: faker.name.findName(),
email: faker.internet.email(),
age: randomInt(0, 100),
}));

if (i % 1000 == 0) {
await Promise.all(promises);
promises.length = 0;
}

if (i == glauberPos) {
promises.push(User.create({
name: "Glauber Costa",
email: "glauber@nospam.me",
age: 40,
}));
}
if (i == glauberJrPos) {
promises.push(User.create({
name: "Glauber Costa",
email: "glauberjr@nospam.me",
age: 15,
}));
}
}
await Promise.all(promises);
return new Response(`inserted ${populationSize}`);
}
9 changes: 9 additions & 0 deletions perf/chiselc/backend/endpoints/inline-validate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { User } from "../models/user";
import { validate } from "email-validator";

export default async function (req: Request): Promise<Response> {
const user = await User.findOne((user) =>
user.name == "Glauber Costa" && user.age >= 40 && validate(user.email)
);
return new Response(user?.email ?? "not found");
}
15 changes: 15 additions & 0 deletions perf/chiselc/backend/endpoints/needle.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { User } from "../models/user";

export default async function (req: Request): Promise<Response> {
await User.create({
name: "Glauber Costa",
email: "glauber@nospam.me",
age: 40,
});
await User.create({
name: "Glauber Costa",
email: "glauberjr@nospam.me",
age: 15,
});
return new Response("ok");
}
3 changes: 3 additions & 0 deletions perf/chiselc/backend/endpoints/users.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { User } from "../models/user.ts";

export default User.crud();
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ChiselEntity } from "@chiselstrike/api"
import { ChiselEntity } from "@chiselstrike/api";

export class User extends ChiselEntity {
name: string;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"author": "",
"license": "ISC",
"dependencies": {
"@chiselstrike/api": "0.9.0",
"@chiselstrike/api": "file:../../packages/chiselstrike-api",
"email-validator": "^2.0.4",
"esbuild": "^0.14.14",
"typescript": "^4.5.4"
},
Expand Down
File renamed without changes.

0 comments on commit ab34a2e

Please sign in to comment.