2016-07-20 2 views
1

우리는 JS 파일을 축소하기 위해 Closure Compiler jar 파일을 사용하고 있습니다. 이 JS 파일은 클라이언트가 설정 화면에서 [저장] 버튼을 누르면 생성됩니다.jar 파일을 실행하는 서비스

각 호출마다 JVM을 시작하기 때문에 Closure Compiler jar 파일을 호출하는 데 3-6 초가 걸립니다. 이것은 너무 길며 아무런 이유없이 ... 부팅이나 첫 번째 호출에서 JVM을 백그라운드에서 계속 실행하는 것이 좋을 것입니다.

실행중인 JVM 머신에서 서비스 등으로 JAR 파일을로드하는 방법이 있습니까? 또는 아마 JVM을 '캐쉬 (cache)'하는 방식으로 다음에 jar이 호출 될 때 새로운 JVM을 시작하지 않고 이전 JVM을 사용합니다.

환경은 Ubuntu 서버, Django, Python입니다.

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을 사용할 수 있다고 생각 : 다음은 jar 파일을 호출하는 현재 코드입니다. Gradle에는 gradle daemon이라는 뛰어난 기능이 있습니다.이 기능은 오랜 시간 백그라운드 JVM 프로세스로 빌드를 다른 경우보다 훨씬 빠르게 실행합니다.

그레이 드는 폐쇄 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 Virtual Machine의 실행 프로그램입니다. 똑 (drip) 스크립트는 java 명령의 드롭 인 (drop-in) 대체로 사용하기위한 것입니다.

방울을 설치하고 파이썬 스크립트에 java 대신 drip 명령을 사용할 수 있습니다.

+0

처음으로 드립을 시도했는데, 통합이 간단하다는 이유 때문입니다. 속도면에서 큰 향상은 없었습니다. Gradle은 프로덕션에 적합하지 않음을 나타내며 특히 데몬이 켜져있는 경우에는 적합하지 않습니다. 왜 그런지 아십니까? – oriadam

+0

@oriadam,이 성명서에 링크를 제공해 주시겠습니까? – SerCe

+0

SerCe, 여기 : https://docs.gradle.org/current/userguide/gradle_daemon.html – oriadam

관련 문제