google closure js 압축 기 를 로 컬 코드 로 컴 파일 하여 실행 가능 한 파일 로 컴 파일 하려 는 시도

1764 단어 closure
최근@정구 야 구 는 구 글 클 로 저 를 자바 명령 행 으로 시작 하 는 속도 가 느 리 고 아무것도 하지 않 고 한 번 도 실행 하지 않 아 도 1s 가 넘는다 고 불평 했다.많은 js 파일 을 처리 할 때 모든 파일 을 한 번 씩 실행 하 는 것 은 죽은 사람 이다.gcj 가 gcc 의 자바 전단 으로 자바 코드 를 로 컬 코드 로 컴 파일 하여 실행 할 수 있다 는 것 을 생각 하여 궁금 하 게 시 도 했 습 니 다.과정 은 다음 과 같 고 우여곡절 이 많 습 니 다.
 
  • 우선 patch google closure 소스 코드 를 사용 해 야 합 니 다.gcj 와 통 합 된 gnu classpath 기초 라 이브 러 리 는 현재 자바 5 만 지원 하 는 일부 특징 을 실현 하기 때문에 원본 코드 에서 지원 하지 않 는 부분 을 돌아 가 야 합 니 다.패 치 는 첨부 파일 을 보고 google closure 소스 코드 루트 디 렉 터 리 에 다운로드 하고 patch를 다운로드 하면 됩 니 다.주요 수정 점 은 명령 행 해석 논리 에서 gcj 가 지원 하지 않 는 annotation 문법 을 제거 하 는 것 입 니 다.OpenJDK 에서 gnu classpath 가 실현 되 지 않 은 정규 전의 방법 Pattern.quote()를 보충 합 니 다.gnu classpath 가 구현 되 지 않 은 Math.copy Sign()방법 제거
  • 원래 명령 행 해석 논 리 를 사용 할 수 없습니다.간단 한 명령 행 시작 입구 류 를 추가 할 수 밖 에 없습니다.첨부 파일 에 있 는 Native Runner.java 를 참조 하여 google closure 소스 디 렉 터 리 에 있 는 src/com/google/javascript/jscomp/하위 디 렉 터 리 에 배치 합 니 다
  • google closure 소스 디 렉 터 리 에서 ant 재 컴 파일 포장 을 실행 하여 build/하위 디 렉 터 리 의 결 과 를 copiler.jar
  • 로 가 져 옵 니 다.
  • 다음 gcj 명령 행 으로 copiler.jar 를 로 컬 코드 로 변환 하여 실행 가능 한 파일 로 변환 합 니 다.
  • gcj -findirect-dispatch --main=com.google.javascript.jscomp.NativeRunner -o closure compiler.jar -Wl,-Bsymbolic
    

     
    마지막 으로 컴 파일 된 실행 가능 한 파일 은 약 33MB 이지 만 테스트 후 크게 실망 하 였 습 니 다.자바-jar 로 직접 시작 하 는 속도 와 별 차이 가 없 으 며 운행 속도 가 거의 50%느 렸 습 니 다.gcj 가 gcc 4.6 새로운 SSA 최적화 체인 을 이용 하지 못 하기 때 문 일 것 입 니 다.하지만 원래 자바 에 게 는...조금 만 동적 특성 을 이용 한 곳 이 있 으 면 AOT 컴 파일 러 는 복잡 한 메커니즘 을 여러 차례 고려 하여 호 환 해 야 하기 때문에 JIT 컴 파일 생 성 코드 의 치밀 도 를 따라 잡기 어렵다.
     
    그 나 저 나 자바 프로그램 이 기본적으로 자바 1.4 호 환 되 고 동적 특성 을 많이 사용 하지 않 았 다 면 C/C+프로그램 에서 이 코드 를 재 활용 하려 면 gcj 컴 파일 이 가장 이상 적 인 해결 방안 이 될 것 입 니 다.하하.

    좋은 웹페이지 즐겨찾기