我们使用闭包编译器jar文件来缩小JS文件。这些JS文件是在客户端单击其设置屏幕上的Save按钮时生成的。
每次对闭包编译器jar文件的调用都需要3-6秒,因为每次调用都会启动一个JVM。太长了,没有什么好的理由.我很乐意让JVM在后台运行,无论是在引导时还是在第一次调用时。
有没有一种方法可以将JAR文件作为服务从运行中的JVM机器加载,或者类似的方法?或者是一种“缓存”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()发布于 2016-07-20 11:06:55
Gradle
我认为你可以使用Gradle,而不是自己去做。Gradle有一个很好的特性,名为gradle daemon,它是一个长期存在的后台JVM进程,它比其他情况下更快地执行您的构建。
Gradle有闭包编译器插件,所以集成很容易。
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
}而且您不必在计算机上安装gradle,您可以使用gradle wraper,它将在gradle启动之前下载适当版本的gradle。
滴水
如果不想使用gradle,可以使用滴水。Drip是Java虚拟机的启动程序,它比java命令提供了更快的启动时间。滴漏脚本的目的是替代java命令,只是速度更快。
您可以在您的python脚本中安装drip命令并使用它代替java。
https://stackoverflow.com/questions/38478481
复制相似问题