perf: have more than 1ms granularity for rebuild detection
This commit is contained in:
		
							parent
							
								
									cd3bb25626
								
							
						
					
					
						commit
						6ea359e55e
					
				| @ -39,7 +39,7 @@ type BuildData = { | ||||
| 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 @@ async function partialRebuildFromEntrypoint( | ||||
|     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 @@ async function rebuildFromEntrypoint( | ||||
|     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 @@ async function rebuildFromEntrypoint( | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   release() | ||||
|   clientRefresh() | ||||
|   toRebuild.clear() | ||||
|   toRemove.clear() | ||||
|   release() | ||||
| } | ||||
| 
 | ||||
| export default async (argv: Argv, mut: Mutex, clientRefresh: () => void) => { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user