如何从Python调用jar时最小化JavaVM的加载时间?

时间:2016-05-21 23:18:55

标签: java python google-closure-compiler

我使用Google Closure Compiler jar文件来最小化反映客户所做更改的生产JS文件。每次用户点击"发布更改"在后端面板上,它创建一个对compiler.jar文件的系统调用 - 但无论JS文件大小如何,每次调用都需要4-6秒。经过研究,我发现大部分延迟是为每次调用加载JavaVM。系统是Ubuntu和Python。

如何让JavaVM不断启动并运行,并在每次用户单击"发布"?

时加载compiler.jar文件

Python代码:

import subprocess
jarjs = os.path.join(ROOT_DIR, "compiler.jar")
fn_output = fn_source.replace('.js','.min.js')
p = subprocess.Popen(['java','-jar',jarjs,'--jscomp_off','internetExplorerChecks','--compilation_level','SIMPLE_OPTIMIZATIONS','--js',fn_source,'--js_output_file',fn_output], stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = p.communicate()

fuller code

1 个答案:

答案 0 :(得分:1)

有几种通用的java解决方案可以加载进程,包括:

http://www.martiansoftware.com/nailgun/

https://github.com/ninjudd/drip

2018年9月更新:现在也可以使用Graal native-image工具构建Closure编译器。这提供了惊人的更快启动,但降低了峰值性能。对于在JVM版本中构建在30秒以下的任何东西,这可能是一个很好的权衡。