Browse Source

[Elysia] Add test with smol configuration (#8504)

* [Elysia] Add test with smol configuration

* [Elysia] Update Elysia to v 0.7.17

* [Elysia] Derive queries only if needed

* [Elysia] Update postgres.js
Imam Fahrur Rofi 1 year ago
parent
commit
3d8a6dbd09

+ 21 - 0
frameworks/TypeScript/elysia/benchmark_config.json

@@ -41,6 +41,27 @@
         "display_name": "Elysia [PostgreSQL]",
         "display_name": "Elysia [PostgreSQL]",
         "notes": "",
         "notes": "",
         "versus": "nodejs"
         "versus": "nodejs"
+      },
+      "smol-postgres": {
+        "db_url": "/db",
+        "query_url": "/queries?queries=",
+        "update_url": "/updates?queries=",
+        "fortune_url": "/fortunes",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Micro",
+        "database": "Postgres",
+        "framework": "elysia",
+        "language": "TypeScript",
+        "flavor": "None",
+        "orm": "Raw",
+        "platform": "bun",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "Elysia [smol] [PostgreSQL]",
+        "notes": "",
+        "versus": "nodejs"
       }
       }
     }
     }
   ]
   ]

BIN
frameworks/TypeScript/elysia/bun.lockb


+ 2 - 0
frameworks/TypeScript/elysia/bunfig.toml

@@ -0,0 +1,2 @@
+# https://bun.sh/docs/runtime/bunfig
+smol = false

+ 17 - 0
frameworks/TypeScript/elysia/elysia-smol-postgres.dockerfile

@@ -0,0 +1,17 @@
+FROM oven/bun:1.0
+
+EXPOSE 8080
+
+COPY . .
+
+ENV NODE_ENV production
+
+RUN bun install --production
+
+RUN bun run build
+
+ENV DATABASE postgres
+
+RUN sed -i 's/smol = false/smol = true/g' bunfig.toml
+
+CMD ["bun", "spawn.ts"]

+ 2 - 2
frameworks/TypeScript/elysia/package.json

@@ -11,7 +11,7 @@
     "build": "bun build --target=bun --minify src/index.ts --outdir=build"
     "build": "bun build --target=bun --minify src/index.ts --outdir=build"
   },
   },
   "dependencies": {
   "dependencies": {
-    "elysia": "^0.7.15",
-    "postgres": "^3.3.5"
+    "elysia": "^0.7.17",
+    "postgres": "^3.4.1"
   }
   }
 }
 }

+ 26 - 26
frameworks/TypeScript/elysia/src/db-handlers.ts

@@ -6,7 +6,7 @@ const deps = new Elysia({
   name: 'deps',
   name: 'deps',
 })
 })
   .decorate('db', postgres)
   .decorate('db', postgres)
-  .decorate('generateRandomNumber', () => Math.floor(Math.random() * 10000) + 1)
+  .decorate('generateRandomNumber', () => Math.ceil(Math.random() * 10000))
   .decorate('html', (fortunes: Fortune[]) => {
   .decorate('html', (fortunes: Fortune[]) => {
     const n = fortunes.length;
     const n = fortunes.length;
 
 
@@ -18,10 +18,7 @@ const deps = new Elysia({
     }
     }
 
 
     return `<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>${html}</table></body></html>`;
     return `<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>${html}</table></body></html>`;
-  })
-  .derive(({ query }) => ({
-    numberOfObjects: Math.min(parseInt(query.queries ?? '1') || 1, 500),
-  }));
+  });
 
 
 const dbHandlers = new Elysia({
 const dbHandlers = new Elysia({
   name: 'db-handlers',
   name: 'db-handlers',
@@ -32,6 +29,29 @@ const dbHandlers = new Elysia({
     async ({ db, generateRandomNumber }) =>
     async ({ db, generateRandomNumber }) =>
       await db.find(generateRandomNumber())
       await db.find(generateRandomNumber())
   )
   )
+  .get(
+    '/fortunes',
+    async ({ db, html }) => {
+      const fortunes = await db.fortunes();
+
+      fortunes.push({
+        id: 0,
+        message: 'Additional fortune added at request time.',
+      });
+
+      fortunes.sort((a, b) => (a.message < b.message ? -1 : 1));
+
+      return html(fortunes);
+    },
+    {
+      afterHandle({ set }) {
+        set.headers['content-type'] = 'text/html; charset=utf-8';
+      },
+    }
+  )
+  .derive(({ query }) => ({
+    numberOfObjects: Math.min(parseInt(query.queries || '1') || 1, 500),
+  }))
   .get('/queries', async ({ db, generateRandomNumber, numberOfObjects }) => {
   .get('/queries', async ({ db, generateRandomNumber, numberOfObjects }) => {
     const worldPromises = new Array<Promise<World>>(numberOfObjects);
     const worldPromises = new Array<Promise<World>>(numberOfObjects);
 
 
@@ -59,26 +79,6 @@ const dbHandlers = new Elysia({
     await db.bulkUpdate(worlds);
     await db.bulkUpdate(worlds);
 
 
     return worlds;
     return worlds;
-  })
-  .get(
-    '/fortunes',
-    async ({ db, html }) => {
-      const fortunes = await db.fortunes();
-
-      fortunes.push({
-        id: 0,
-        message: 'Additional fortune added at request time.',
-      });
-
-      fortunes.sort((a, b) => (a.message < b.message ? -1 : 1));
-
-      return html(fortunes);
-    },
-    {
-      afterHandle({ set }) {
-        set.headers['content-type'] = 'text/html; charset=utf-8';
-      },
-    }
-  );
+  });
 
 
 export default dbHandlers;
 export default dbHandlers;