我们正在使用Closure Compiler jar文件来缩小我们的JS文件。 当客户端点击其设置屏幕上的[Save]按钮时,会生成这些JS文件。
对Closure Compiler jar文件的每次调用都需要3-6秒,因为它会在每次调用时启动JVM。这太长了,并且没有充分的理由......我很乐意在启动或第一次调用时保持JVM在后台启动并运行。
有没有办法从正在运行的JVM机器加载JAR文件作为服务,或类似的东西?或者也许是一种“缓存”JVM的方法,以便下次调用jar时,它不会启动新的JVM而是使用前一个JVM?
环境是Ubuntu服务器,Django,Python。 这是调用jar文件的当前代码:
import time, subprocess, random
# run google closure compiler
jarjs = os.path.join(ROOT_DIR, "compiler.jar")
fn_min = fn_max.replace('.js','.min.js')
p = subprocess.Popen(['java','-jar',jarjs,'--jscomp_off','internetExplorerChecks','--compilation_level','SIMPLE_OPTIMIZATIONS','--js',fn_max,'--js_output_file',fn_min], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = p.communicate()
答案 0 :(得分:0)
我认为您可以使用Gradle而不是自己动手。 Gradle有一个名为gradle daemon
的优秀功能,它是一个长期存在的后台JVM进程,可以比其他情况更快地执行构建。
Gradle已关闭compiler plugin,因此可以轻松完成整合。
RGB_565
您不必在您的计算机上安装gradle,您可以使用gradle wraper
在开始之前下载适当版本的gradle。
如果您不想使用gradle,则可以使用Drip代替。 Drip是Java虚拟机的启动程序,它比java命令提供更快的启动时间。滴滴脚本旨在成为java命令的替代品,只是更快。
您可以在python脚本中安装drip并使用repositories {
mavenCentral() //or jcenter()
}
configurations {
closureCompiler
}
dependencies {
closureCompiler 'com.google.javascript:closure-compiler:v20150609'
}
task compileJS(type: JavaExec){
classpath configurations.closureCompiler
main = 'com.google.javascript.jscomp.CommandLineRunner'
def closureArgs = []
//append all your command line options here
closureArgs << "--compilation_level=SIMPLE_OPTIMIZATIONS"
closureArgs << "--js_output_file=app.js"
closureArgs << "input1.js"
closureArgs << "input2.js"
closureArgs << "src/**.js"
args closureArgs
}
命令代替drip
。