[JS IR IC] Write only modified JS files
Optimization: the patch allows copying and overwriting only modified JS files during the compilation output writing routine.
This commit is contained in:
committed by
Space Team
parent
75931fb9c8
commit
fde71918ed
+1
-2
@@ -86,9 +86,8 @@ class JsExecutableProducer(
|
|||||||
)
|
)
|
||||||
|
|
||||||
stopwatch.startNext("Committing compiled JS code")
|
stopwatch.startNext("Committing compiled JS code")
|
||||||
jsMultiModuleCache.commitCompiledJsCode(artifact, compiledModule)
|
|
||||||
rebuildModules += moduleName
|
rebuildModules += moduleName
|
||||||
return compiledModule
|
return jsMultiModuleCache.commitCompiledJsCode(artifact, compiledModule)
|
||||||
}
|
}
|
||||||
|
|
||||||
val cachedMainModule = cachedProgram.last()
|
val cachedMainModule = cachedProgram.last()
|
||||||
|
|||||||
+3
-2
@@ -102,13 +102,14 @@ class JsMultiModuleCache(private val moduleArtifacts: List<ModuleArtifact>) {
|
|||||||
jsCodeFilePath?.let { CompilationOutputsCached(it, sourceMapFilePath, tsDefinitionsFilePath) }
|
jsCodeFilePath?.let { CompilationOutputsCached(it, sourceMapFilePath, tsDefinitionsFilePath) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun commitCompiledJsCode(artifact: ModuleArtifact, compilationOutputs: CompilationOutputsBuilt) =
|
fun commitCompiledJsCode(artifact: ModuleArtifact, compilationOutputs: CompilationOutputsBuilt): CompilationOutputs =
|
||||||
artifact.artifactsDir?.let { cacheDir ->
|
artifact.artifactsDir?.let { cacheDir ->
|
||||||
val jsCodeFile = File(cacheDir, CACHED_MODULE_JS)
|
val jsCodeFile = File(cacheDir, CACHED_MODULE_JS)
|
||||||
val jsMapFile = File(cacheDir, CACHED_MODULE_JS_MAP)
|
val jsMapFile = File(cacheDir, CACHED_MODULE_JS_MAP)
|
||||||
compilationOutputs.writeJsCode(jsCodeFile, jsMapFile)
|
compilationOutputs.writeJsCode(jsCodeFile, jsMapFile)
|
||||||
File(cacheDir, CACHED_MODULE_D_TS).writeIfNotNull(compilationOutputs.tsDefinitions?.raw)
|
File(cacheDir, CACHED_MODULE_D_TS).writeIfNotNull(compilationOutputs.tsDefinitions?.raw)
|
||||||
}
|
CompilationOutputsBuiltForCache(jsCodeFile.absolutePath, jsMapFile.absolutePath, compilationOutputs)
|
||||||
|
} ?: compilationOutputs
|
||||||
|
|
||||||
fun loadProgramHeadersFromCache(): List<CachedModuleInfo> {
|
fun loadProgramHeadersFromCache(): List<CachedModuleInfo> {
|
||||||
return moduleArtifacts.map { artifact ->
|
return moduleArtifacts.map { artifact ->
|
||||||
|
|||||||
+42
-2
@@ -74,6 +74,13 @@ class CompilationOutputsBuilt(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun File.copyModificationTimeFrom(from: File) {
|
||||||
|
val mtime = from.lastModified()
|
||||||
|
if (mtime > 0) {
|
||||||
|
setLastModified(mtime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class CompilationOutputsCached(
|
class CompilationOutputsCached(
|
||||||
private val jsCodeFilePath: String,
|
private val jsCodeFilePath: String,
|
||||||
private val sourceMapFilePath: String?,
|
private val sourceMapFilePath: String?,
|
||||||
@@ -86,10 +93,43 @@ class CompilationOutputsCached(
|
|||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
override fun writeJsCode(outputJsFile: File, outputJsMapFile: File) {
|
override fun writeJsCode(outputJsFile: File, outputJsMapFile: File) {
|
||||||
File(jsCodeFilePath).copyTo(outputJsFile, true)
|
File(jsCodeFilePath).copyToIfModified(outputJsFile)
|
||||||
|
|
||||||
sourceMapFilePath?.let {
|
sourceMapFilePath?.let {
|
||||||
File(it).copyTo(outputJsMapFile, true)
|
File(it).copyToIfModified(outputJsMapFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun File.copyToIfModified(target: File) {
|
||||||
|
val thisMtime = lastModified()
|
||||||
|
val targetMtime = target.lastModified()
|
||||||
|
if (thisMtime <= 0 || targetMtime <= 0 || targetMtime > thisMtime) {
|
||||||
|
copyTo(target, true)
|
||||||
|
copyModificationTimeFrom(target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CompilationOutputsBuiltForCache(
|
||||||
|
private val jsCodeFilePath: String,
|
||||||
|
private val sourceMapFilePath: String,
|
||||||
|
private val outputBuilt: CompilationOutputsBuilt
|
||||||
|
) : CompilationOutputs() {
|
||||||
|
|
||||||
|
init {
|
||||||
|
dependencies = outputBuilt.dependencies
|
||||||
|
}
|
||||||
|
|
||||||
|
override val tsDefinitions: TypeScriptFragment?
|
||||||
|
get() = outputBuilt.tsDefinitions
|
||||||
|
|
||||||
|
override val jsProgram: JsProgram?
|
||||||
|
get() = outputBuilt.jsProgram
|
||||||
|
|
||||||
|
override fun writeJsCode(outputJsFile: File, outputJsMapFile: File) {
|
||||||
|
outputBuilt.writeJsCode(outputJsFile, outputJsMapFile)
|
||||||
|
|
||||||
|
File(jsCodeFilePath).copyModificationTimeFrom(outputJsFile)
|
||||||
|
File(sourceMapFilePath).copyModificationTimeFrom(outputJsMapFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user