]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
build: parallelize multi package builds
authorEvan You <yyx990803@gmail.com>
Thu, 3 Dec 2020 18:22:28 +0000 (13:22 -0500)
committerEvan You <yyx990803@gmail.com>
Thu, 3 Dec 2020 18:23:06 +0000 (13:23 -0500)
scripts/build.js

index f3a66051b0ac9e4d92ec8410cdb313051e01fa48..26e287c43226540fc6f2f5aeebbdd8cdd20316ee 100644 (file)
@@ -50,9 +50,25 @@ async function run() {
 }
 
 async function buildAll(targets) {
-  for (const target of targets) {
-    await build(target)
+  await runParallel(require('os').cpus().length, targets, build)
+}
+
+async function runParallel(maxConcurrency, source, iteratorFn) {
+  const ret = []
+  const executing = []
+  for (const item of source) {
+    const p = Promise.resolve().then(() => iteratorFn(item, source))
+    ret.push(p)
+
+    if (maxConcurrency <= source.length) {
+      const e = p.then(() => executing.splice(executing.indexOf(e), 1))
+      executing.push(e)
+      if (executing.length >= maxConcurrency) {
+        await Promise.race(executing)
+      }
+    }
   }
+  return Promise.all(ret)
 }
 
 async function build(target) {