diff --git a/benchmark/webpack.config.js b/benchmark/webpack.config.js index 8b9036f80b4898..fc8ca0b6e73d2a 100644 --- a/benchmark/webpack.config.js +++ b/benchmark/webpack.config.js @@ -4,7 +4,7 @@ const webpackBaseConfig = require('../webpackBaseConfig'); module.exports = { ...webpackBaseConfig, entry: path.resolve(__dirname, 'index.js'), - mode: 'development', + mode: 'production', output: { path: path.resolve(__dirname, '../tmp'), filename: 'benchmark.js', diff --git a/package.json b/package.json index 026e61e18e3833..2626cf850837a9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "proptypes": "cross-env BABEL_ENV=test babel-node --extensions \".tsx,.ts,.js\" ./scripts/generateProptypes.ts", "deduplicate": "node scripts/deduplicate.js", "argos": "argos upload test/regressions/screenshots/chrome --token $ARGOS_TOKEN", - "benchmark": "yarn webpack --config benchmark/webpack.config.js --mode \"production\" && node scripts/benchmark.js", + "benchmark": "yarn webpack --config benchmark/webpack.config.js && node scripts/benchmark.js", "build:codesandbox": "lerna run --parallel --scope \"@material-ui/*\" build", "docs:api": "rimraf ./docs/pages/api-docs && yarn docs:api:build", "docs:api:build": "cross-env BABEL_ENV=test __NEXT_EXPORT_TRAILING_SLASH=true babel-node --extensions \".tsx,.ts,.js\" ./docs/scripts/buildApi.ts ./docs/pages/api-docs ./packages/material-ui/src ./packages/material-ui-lab/src", @@ -150,7 +150,6 @@ "unist-util-visit": "^2.0.2", "url-loader": "^4.1.0", "vrtest-mui": "^0.3.4", - "wait-on": "^5.2.0", "webpack": "^4.41.0", "webpack-cli": "^3.3.9", "yargs": "^16.0.3", diff --git a/scripts/benchmark.js b/scripts/benchmark.js index 24bea6eee845e0..b13e9eb830bfd0 100644 --- a/scripts/benchmark.js +++ b/scripts/benchmark.js @@ -2,22 +2,37 @@ /* eslint-disable no-await-in-loop */ const puppeteer = require('puppeteer'); const { performance } = require('perf_hooks'); -const waitOn = require('wait-on'); const handler = require('serve-handler'); const http = require('http'); -const SERVER = 'localhost'; const PORT = 1122; const APP = 'benchmark'; -http - .createServer((request, response) => { +function createServer(options) { + const { port } = options; + const server = http.createServer((request, response) => { return handler(request, response); - }) - .listen(PORT, () => { - console.log(`Running at http://localhost:${PORT}`); }); + function close() { + return new Promise((resolve, reject) => { + server.close((error) => { + if (error !== undefined) { + reject(error); + } else { + resolve(); + } + }); + }); + } + + return new Promise((resolve) => { + server.listen(port, () => { + resolve({ close }); + }); + }); +} + async function createBrowser() { const browser = await puppeteer.launch(); @@ -26,12 +41,9 @@ async function createBrowser() { const page = await browser.newPage(); await page.goto(url); - return { - page, - close: () => page.close(), - }; + return page; }, - close: async () => browser.close(), + close: () => browser.close(), }; } @@ -39,7 +51,7 @@ async function runMeasures(browser, testCase, times) { const measures = []; for (let i = 0; i < times; i += 1) { - const { page, close } = await browser.openPage(`http://${SERVER}:${PORT}/${APP}?${testCase}`); + const page = await browser.openPage(`http://localhost:${PORT}/${APP}?${testCase}`); const benchmark = await page.evaluate(() => { const { loadEventEnd, navigationStart } = performance.timing; @@ -47,7 +59,7 @@ async function runMeasures(browser, testCase, times) { }); measures.push(benchmark); - await close(); + await page.close(); } return measures; @@ -73,11 +85,7 @@ const printMeasures = (measures) => { }; async function run() { - await waitOn({ - resources: [`http://${SERVER}:${PORT}/${APP}`], - }); - - const browser = await createBrowser(); + const [server, browser] = await Promise.all([createServer({ port: PORT }), createBrowser()]); const measures = {}; try { @@ -143,7 +151,7 @@ async function run() { 10, ); } finally { - await browser.close(); + await Promise.all([browser.close(), server.close()]); } printMeasures(measures); diff --git a/yarn.lock b/yarn.lock index ba257baee7f928..7c03ec6501f09b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1429,35 +1429,6 @@ dependencies: prop-types "^15.7.2" -"@hapi/address@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-4.1.0.tgz#d60c5c0d930e77456fdcde2598e77302e2955e1d" - integrity sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@hapi/formula@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-2.0.0.tgz#edade0619ed58c8e4f164f233cda70211e787128" - integrity sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A== - -"@hapi/hoek@^9.0.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6" - integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw== - -"@hapi/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-2.0.0.tgz#805b40d4dbec04fc116a73089494e00f073de8df" - integrity sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw== - -"@hapi/topo@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" - integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" @@ -3943,13 +3914,6 @@ axe-core@^3.5.4: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== -axios@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - axobject-query@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -6234,7 +6198,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@3.1.0, debug@=3.1.0, debug@~3.1.0: +debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -7833,13 +7797,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - follow-redirects@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" @@ -9663,17 +9620,6 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" -joi@^17.1.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.2.1.tgz#e5140fdf07e8fecf9bc977c2832d1bdb1e3f2a0a" - integrity sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA== - dependencies: - "@hapi/address" "^4.1.0" - "@hapi/formula" "^2.0.0" - "@hapi/hoek" "^9.0.0" - "@hapi/pinpoint" "^2.0.0" - "@hapi/topo" "^5.0.0" - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -14521,7 +14467,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.5: +rxjs@^6.4.0, rxjs@^6.5.2: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== @@ -16715,17 +16661,6 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -wait-on@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.2.0.tgz#6711e74422523279714a36d52cf49fb47c9d9597" - integrity sha512-U1D9PBgGw2XFc6iZqn45VBubw02VsLwnZWteQ1au4hUVHasTZuFSKRzlTB2dqgLhji16YVI8fgpEpwUdCr8B6g== - dependencies: - axios "^0.19.2" - joi "^17.1.1" - lodash "^4.17.19" - minimist "^1.2.5" - rxjs "^6.5.5" - warning@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"