执行 jar 文件的服务
A service that executes jar files
我们正在使用 Closure Compiler jar 文件来缩小我们的 JS 文件。
这些 JS 文件是在客户点击其设置屏幕上的 [保存] 按钮时生成的。
每次调用 Closure Compiler jar 文件需要 3-6 秒,因为每次调用都会启动一个 JVM。这太长了,而且没有充分的理由......我很乐意在启动时或第一次调用时保持 JVM 和 运行 在后台。
有没有办法从 运行 JVM 机器加载 JAR 文件作为服务,或类似的东西?或者可能是 'cache' 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()
Gradle
我认为你可以使用 Gradle 而不是自己做。 Gradle 有一个名为 gradle daemon
的出色功能,它是一个长期存在的后台 JVM 进程,可以比其他情况更快地执行您的构建。
Gradle 有闭包 compiler plugin,所以集成很容易。
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,您可以使用 Drip。 Drip 是 Java 虚拟机的启动器,它提供比 java 命令快得多的启动时间。 drip 脚本旨在作为 java 命令的直接替代品,只是速度更快。
您可以安装 drip 并在 python 脚本中使用 drip
命令代替 java
。
我们正在使用 Closure Compiler jar 文件来缩小我们的 JS 文件。 这些 JS 文件是在客户点击其设置屏幕上的 [保存] 按钮时生成的。
每次调用 Closure Compiler jar 文件需要 3-6 秒,因为每次调用都会启动一个 JVM。这太长了,而且没有充分的理由......我很乐意在启动时或第一次调用时保持 JVM 和 运行 在后台。
有没有办法从 运行 JVM 机器加载 JAR 文件作为服务,或类似的东西?或者可能是 'cache' 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()
Gradle
我认为你可以使用 Gradle 而不是自己做。 Gradle 有一个名为 gradle daemon
的出色功能,它是一个长期存在的后台 JVM 进程,可以比其他情况更快地执行您的构建。
Gradle 有闭包 compiler plugin,所以集成很容易。
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,您可以使用 Drip。 Drip 是 Java 虚拟机的启动器,它提供比 java 命令快得多的启动时间。 drip 脚本旨在作为 java 命令的直接替代品,只是速度更快。
您可以安装 drip 并在 python 脚本中使用 drip
命令代替 java
。