2016-07-20 11 views
1

私たちはJSファイルを縮小するためにClosure Compiler jarファイルを使用しています。 これらのJSファイルは、クライアントが設定画面の[保存]ボタンを押すと生成されます。jarファイルを実行するサービス

各呼び出しごとにJVMを起動するため、Closure Compiler jarファイルの呼び出しには3〜6秒かかります。これは時間がかかり、正当な理由がない...私は起動時や最初の呼び出し時にバックグラウンドで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

のGradle

私が代わりに自分でそれを行うのあなたはGradleのを使用することができると思います。 Gradleには、長寿命のバックグラウンドJVMプロセスであるgradle daemonと呼ばれる優れた機能があり、そうでない場合よりもはるかに迅速にビルドを実行できます。

グラドルは閉鎖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仮想マシンのランチャーです。ドリップスクリプトは、javaコマンドのドロップイン置換であることを意図しています。

ドリップをインストールしてjavaの代わりにdripコマンドを使用して、pythonスクリプトを実行することができます。

+0

最初にドリップを試みました。なぜなら、統合は簡単ではないからです。スピードの大幅な改善はなかった。 Gradleには、プロダクションには適していないと書かれています。特に、デーモンをオンにした場合はそうではありません。なぜそれが分かっていますか? – oriadam

+0

@oriadam、あなたはこの声明とのリンクを提供できますか? – SerCe

+0

SerCe、ここ:https://docs.gradle.org/current/userguide/gradle_daemon.html – oriadam

関連する問題