From 6ea359e55ee6333f27b0a8d59caebdb17b9acbf0 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Sun, 15 Sep 2024 23:42:07 +0000
Subject: [PATCH] perf: have more than 1ms granularity for rebuild detection
---
quartz/build.ts | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/quartz/build.ts b/quartz/build.ts
index 342a27c..38efe36 100644
--- a/quartz/build.ts
+++ b/quartz/build.ts
@@ -39,7 +39,7 @@
type FileEvent = "add" | "change" | "delete"
function newBuildId() {
- return new Date().toISOString()
+ return Math.random().toString(36).substring(2, 8)
}
async function buildQuartz(argv: Argv, mut: Mutex, clientRefresh: () => void) {
@@ -162,17 +162,19 @@
return
}
- const buildStart = new Date().getTime()
- buildData.lastBuildMs = buildStart
+ const buildId = newBuildId()
+ ctx.buildId = buildId
+ buildData.lastBuildMs = new Date().getTime()
const release = await mut.acquire()
- if (buildData.lastBuildMs > buildStart) {
+
+ // if there's another build after us, release and let them do it
+ if (ctx.buildId !== buildId) {
release()
return
}
const perf = new PerfTimer()
console.log(chalk.yellow("Detected change, rebuilding..."))
- ctx.buildId = newBuildId()
// UPDATE DEP GRAPH
const fp = joinSegments(argv.directory, toPosixPath(filepath)) as FilePath
@@ -357,19 +359,19 @@
toRemove.add(filePath)
}
- const buildStart = new Date().getTime()
- buildData.lastBuildMs = buildStart
+ const buildId = newBuildId()
+ ctx.buildId = buildId
+ buildData.lastBuildMs = new Date().getTime()
const release = await mut.acquire()
// there's another build after us, release and let them do it
- if (buildData.lastBuildMs > buildStart) {
+ if (ctx.buildId !== buildId) {
release()
return
}
const perf = new PerfTimer()
console.log(chalk.yellow("Detected change, rebuilding..."))
- ctx.buildId = newBuildId()
try {
const filesToRebuild = [...toRebuild].filter((fp) => !toRemove.has(fp))
@@ -405,10 +407,10 @@
}
}
- release()
clientRefresh()
toRebuild.clear()
toRemove.clear()
+ release()
}
export default async (argv: Argv, mut: Mutex, clientRefresh: () => void) => {
--
Gitblit v1.10.0