From c10311cc74937b81f48ff2d8508fac41b8c5d249 Mon Sep 17 00:00:00 2001 From: easrng Date: Mon, 9 Oct 2023 13:02:46 -0600 Subject: [PATCH] feat(terser): use os.availableParallelism if possible --- package.json | 2 +- packages/terser/src/worker-pool.ts | 12 +++++++++--- pnpm-lock.yaml | 22 ++++++++++++++++------ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index b6203e6d4..4d2580baf 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@ava/babel": "2.0.0", "@rollup/plugin-typescript": "^9.0.1", "@types/conventional-commits-parser": "^3.0.2", - "@types/node": "14.18.30", + "@types/node": "20.8.4", "@types/semver": "^7.3.7", "@types/source-map-support": "^0.5.4", "@types/yargs-parser": "^20.2.1", diff --git a/packages/terser/src/worker-pool.ts b/packages/terser/src/worker-pool.ts index d061e5d69..afc5e7829 100644 --- a/packages/terser/src/worker-pool.ts +++ b/packages/terser/src/worker-pool.ts @@ -1,6 +1,6 @@ import { AsyncResource } from 'async_hooks'; import { Worker } from 'worker_threads'; -import { cpus } from 'os'; +import os from 'os'; import { EventEmitter } from 'events'; import serializeJavascript from 'serialize-javascript'; @@ -40,8 +40,14 @@ export class WorkerPool extends EventEmitter { constructor(options: WorkerPoolOptions) { super(); - // cpus() can return [] on some platforms, and we always need at least 1 worker - this.maxInstances = options.maxWorkers || cpus().length || 1; + if (options.maxWorkers) { + this.maxInstances = options.maxWorkers; + } else if (typeof os.availableParallelism === 'function') { + this.maxInstances = os.availableParallelism(); + } else { + // cpus() can return [] on some platforms, and we always need at least 1 worker + this.maxInstances = os.cpus().length || 1; + } this.filePath = options.filePath; this.on(freeWorker, () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0102b96b7..66ac40dc1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 '@types/node': - specifier: 14.18.30 - version: 14.18.30 + specifier: 20.8.4 + version: 20.8.4 '@types/semver': specifier: ^7.3.7 version: 7.3.12 @@ -85,7 +85,7 @@ importers: version: 0.5.21 ts-node: specifier: 10.9.1 - version: 10.9.1(@types/node@14.18.30)(typescript@4.8.4) + version: 10.9.1(@types/node@20.8.4)(typescript@4.8.4) tsconfig-paths: specifier: ^3.9.0 version: 3.14.1 @@ -2733,6 +2733,12 @@ packages: resolution: {integrity: sha512-vQAnaReSQkEDa8uwAyQby8bYGKu84R/deEc6mg5T8fX6gzCn8QW6rziSgsti1fNvsrswKUKPnVTi7uoB+u62Mw==} dev: true + /@types/node@20.8.4: + resolution: {integrity: sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==} + dependencies: + undici-types: 5.25.3 + dev: true + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -6413,7 +6419,7 @@ packages: dependencies: lilconfig: 2.0.6 postcss: 8.4.17 - ts-node: 10.9.1(@types/node@14.18.30)(typescript@4.8.4) + ts-node: 10.9.1(@types/node@20.8.4)(typescript@4.8.4) yaml: 1.10.2 dev: true @@ -7605,7 +7611,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false - /ts-node@10.9.1(@types/node@14.18.30)(typescript@4.8.4): + /ts-node@10.9.1(@types/node@20.8.4)(typescript@4.8.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -7624,7 +7630,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 14.18.30 + '@types/node': 20.8.4 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -7746,6 +7752,10 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /undici-types@5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + dev: true + /unicode-canonical-property-names-ecmascript@1.0.4: resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==} engines: {node: '>=4'}