diff --git a/bench/minimal-server/benchmark-app/app/layout.js b/bench/minimal-server/benchmark-app/app/layout.js new file mode 100644 index 0000000000000..bf15eff980a84 --- /dev/null +++ b/bench/minimal-server/benchmark-app/app/layout.js @@ -0,0 +1,10 @@ +import * as React from 'react' + +export default function Root({ children }) { + return ( + + + {children} + + ) +} diff --git a/bench/minimal-server/benchmark-app/app/rsc/page.js b/bench/minimal-server/benchmark-app/app/rsc/page.js new file mode 100644 index 0000000000000..395757bacd944 --- /dev/null +++ b/bench/minimal-server/benchmark-app/app/rsc/page.js @@ -0,0 +1,5 @@ +import * as React from 'react' + +export default function page() { + return
hello
+} diff --git a/bench/minimal-server/benchmark-app/next.config.js b/bench/minimal-server/benchmark-app/next.config.js new file mode 100644 index 0000000000000..cfa3ac3d7aa94 --- /dev/null +++ b/bench/minimal-server/benchmark-app/next.config.js @@ -0,0 +1,5 @@ +module.exports = { + experimental: { + appDir: true, + }, +} diff --git a/bench/minimal-server/benchmark-app/package.json b/bench/minimal-server/benchmark-app/package.json new file mode 100644 index 0000000000000..883a323075faf --- /dev/null +++ b/bench/minimal-server/benchmark-app/package.json @@ -0,0 +1,14 @@ +{ + "name": "stats-app", + "private": true, + "license": "MIT", + "dependencies": { + "webpack-bundle-analyzer": "^4.6.1", + "webpack-stats-plugin": "^1.1.0" + }, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start" + } +} diff --git a/bench/minimal-server/benchmark-app/pages/index.js b/bench/minimal-server/benchmark-app/pages/index.js new file mode 100644 index 0000000000000..a41e3b2fd91bf --- /dev/null +++ b/bench/minimal-server/benchmark-app/pages/index.js @@ -0,0 +1,9 @@ +import * as React from 'react' + +export default function page() { + return
hello world
+} + +export async function getServerSideProps() { + return {} +} diff --git a/bench/minimal-server/package.json b/bench/minimal-server/package.json new file mode 100644 index 0000000000000..cdb7cecb8f611 --- /dev/null +++ b/bench/minimal-server/package.json @@ -0,0 +1,7 @@ +{ + "name": "next-minimal-server", + "description": "Minimal server for Next.js for benchmarking/perf analysis purposes.", + "scripts": { + "start": "node start.js" + } +} diff --git a/bench/minimal-server/start.js b/bench/minimal-server/start.js new file mode 100644 index 0000000000000..ceee4f2e235a9 --- /dev/null +++ b/bench/minimal-server/start.js @@ -0,0 +1,40 @@ +process.env.__NEXT_REACT_CHANNEL = 'exp' +process.env.NODE_ENV = 'production' + +require('../../test/lib/react-channel-require-hook') + +console.time('next-cold-start') +const NextServer = require('next/dist/server/next-server').default +const path = require('path') + +const appDir = path.join(__dirname, 'benchmark-app') +const distDir = '.next' + +const compiledConfig = require(path.join( + appDir, + distDir, + 'required-server-files.json' +)).config + +process.chdir(appDir) + +const nextServer = new NextServer({ + conf: compiledConfig, + dir: appDir, + distDir, + minimalMode: true, + customServer: false, +}) + +const requestHandler = nextServer.getRequestHandler() + +require('http') + .createServer((req, res) => { + console.time('next-request') + return requestHandler(req, res).finally(() => { + console.timeEnd('next-request') + }) + }) + .listen(3000, () => { + console.timeEnd('next-cold-start') + })