Skip to content

Commit 9699287

Browse files
committed
Bundle parser-sdk into one js file to speed up startup time
Using bun here over esbuild as bun generates correct esm code which works. esbuild right now outputs a weird mixture bundles which fails with cryptic "stream cannot be required dynamically" node error messages. The performance speedup here is quit substantial: (tester using hyperfine with a mocked out parser (always returning emtpy results), result files are fetched from a github gist and pushed to some webhook testing site. e.g. ```sh hyperfine --runs 25 -i 'SCAN_NAME=nmap NAMESPACE=default node --enable-source-maps parser-wrapper.js https://gist.githubusercontent.com/J12934/6440478a5005dafdf52c1236c859eed0/raw/bc212dffbdaaf03cdf119b60b0c5211533677b36/scanme-nmap-org.xml hyperfine --runs 25 -i 'SCAN_NAME=nmap NAMESPACE=default node --enable-source-maps parser-wrapper.js https://gist.githubusercontent.com/J12934/6440478a5005dafdf52c1236c859eed0/raw/bc212dffbdaaf03cdf119b60b0c5211533677b36/scanme-nmap-org.xml https://webhook.site/... ``` Results: Regular: Time (mean ± σ): 467.0 ms ± 47.2 ms [User: 443.8 ms, System: 97.7 ms] Range (min … max): 443.2 ms … 692.0 ms 25 runs Bundled: Time (mean ± σ): 246.0 ms ± 16.3 ms [User: 176.6 ms, System: 16.9 ms] Range (min … max): 232.7 ms … 319.7 ms 25 runs So total runtime dropped from 443ms to 232ms, but even more significant system time dropped from ~100ms to ~20ms. So it should require a lot less cpu cycles and resources to execute 🥳 Signed-off-by: Jannik Hollenbach <jannik.hollenbach@iteratec.com>
1 parent ce2db15 commit 9699287

4 files changed

Lines changed: 16 additions & 10 deletions

File tree

parser-sdk/nodejs/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
# SPDX-License-Identifier: Apache-2.0
44

55
node_modules/
6+
build/

parser-sdk/nodejs/Dockerfile

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

5-
FROM node:22-alpine AS build
6-
WORKDIR /home/app
5+
FROM oven/bun:1.2 AS build
6+
WORKDIR /home/app/
77
COPY package.json package-lock.json ./
8-
RUN npm ci --omit=dev
8+
RUN bun install
9+
COPY *.js ./
10+
RUN bun run build
911

1012
FROM node:22-alpine
1113
ARG NODE_ENV
1214
RUN addgroup --system --gid 1001 app && adduser app --system --uid 1001 --ingroup app
1315
WORKDIR /home/app/parser-wrapper/
14-
COPY --from=build --chown=root:root --chmod=755 /home/app/node_modules/ ./node_modules/
15-
COPY --chown=root:root --chmod=755 ./parser-wrapper.js ./parser-wrapper.js
16-
COPY --chown=root:root --chmod=755 ./parser-utils.js ./parser-utils.js
16+
COPY --from=build --chown=root:root --chmod=755 /home/app/build/ ./
1717
COPY --chown=root:root --chmod=755 ./findings-schema.json ./findings-schema.json
1818
USER 1001
1919
ENV NODE_ENV=${NODE_ENV:-production}
20-
ENTRYPOINT ["node", "/home/app/parser-wrapper/parser-wrapper.js"]
20+
ENTRYPOINT ["node", "--enable-source-maps", "/home/app/parser-wrapper/parser-wrapper.js"]

parser-sdk/nodejs/package-lock.json

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser-sdk/nodejs/package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77
"keywords": [],
88
"author": "iteratec GmbH",
99
"license": "Apache-2.0",
10+
"scripts": {
11+
"build": "bun build --production --target=node --outdir=build/ --external=./parser/parser.js --sourcemap=external --minify ./parser-wrapper.js"
12+
},
1013
"dependencies": {
1114
"@kubernetes/client-node": "^1.3.0",
1215
"ajv": "^8.17.1",
1316
"ajv-draft-04": "^1.0.0",
1417
"ajv-formats": "^3.0.1",
1518
"jsonpointer": "^5.0.1"
16-
}
17-
}
19+
},
20+
"devDependencies": {}
21+
}

0 commit comments

Comments
 (0)