온라인 압축 javascript --- Google 클 로 저 컴 파 일 러

자 바스 크 립 트 를 압축 하 는 도구 가 많은 데 왜 Google Closure Compiler 를 선택해 야 합 니까?
천 명의 독자 에 게 는 천 개의 햄릿 이 있 는데, 가장 좋 은 답안 이 없 으 니, 여기 서 아래 의 이 분석 을 참고 할 수 있다.
https://github.com/pandamicro/Javascript-Compressors-Analyse
----------------------------
여기 서 Closure Compiler 만 얘 기 하 겠 습 니 다.
우선 가장 핵심 적 인 코드 는 Closure Compiler 온라인 도구 와 phop 자체 cURL 라 이브 러 리 를 이용 하여 압축 합 니 다.
Closure Compiler 는 3 중 압축 모드 를 제공 합 니 다.
ADVANCED_OPTIMIZATIONS    고급 최적화
SIMPLE_OPTIMIZATIONS      단순 최적화
WHITESPACE_ONLY           공백 만 제거
나 는 여기 서 '단순 최적화' 모델 을 선택 했다.
왜 고급 최 적 화 를 선택 하지 않 습 니까?
고급 최 적 화 는 더욱 높 은 압축 률 을 가지 고 더 좋 은 운행 효율 을 가지 는데 왜 나 는 그것 을 선택 하지 않 습 니까?
고급 최적화 에는 치 명 적 인 단점 이 있 기 때문에 코드 를 더욱 철저하게 수정 (폭력 수정) 할 수 있다. 이런 수정 은 코드 를 사용 할 수 없고 사용자 에 게 알 아차 리 기 어렵다.
고급 최적화 의 압축 논리 에 익숙 하지 않다 면 이런 치 명 적 인 코드 를 쓰 는 것 을 피하 기 어렵다.
그래서 나 는 간단 한 최 적 화 를 예 로 들 었 다.
$params = array(
         'output_info'=>'compiled_code',
         'output_format'=>'text',
         'compilation_level'=>'SIMPLE_OPTIMIZATIONS',
         'js_code'=>urlencode($script)
         );
$ch = curl_init('http://closure-compiler.appspot.com/compile');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($params));
$output = curl_exec($ch);
curl_close($ch);

시작 하기 전에 출력 파일 을 쓸 수 있 는 지 확인 하 십시오.
function prep_output_file(){
  if($this->options['output_file']) {
    if(file_exists($this->options['output_file']) and is_writeable($this->options['output_file'])){
       return true;
    }else{
       $dirname = dirname($this->options['output_file']);
       if (file_exists($dirname)) {
          if (is_writeable($dirname)) {
             touch($this->options['output_file']);
             chmod($this->options['output_file'], 0777);
             return true;
          }else{
             trigger_error("Directory not writable");
             return false;
          }
       }else{
            trigger_error("Directory does not exist");
            return false;
       }
    }
  }else{
     trigger_error("Missing output_file");
     return false;
  }
}

압축 하기 전에 시간 을 판단 하여 코드 가 바 뀌 었 는 지 확인 합 니 다.
//$this->options['files']      javascript     
function check_changed(){
   if (file_exists($this->options['output_file'])) {
      $output_filemtime = filemtime($this->options['output_file']);
      foreach ($this->options['files'] as $js_file) {
         if ($output_filemtime < filemtime($js_file)){
            return true;
         }
      }
   } else {
      return true; // no file
   }
   return false;
}

단일 javascript 파일 이나 폴 더 의 모든 파일 을 배열 에 추가 합 니 다 $this - > options ['files']
function add_script($file){
 $file = "{$_SERVER['DOCUMENT_ROOT']}/".(ltrim($file, "/"));
  if (file_exists($file) and is_readable($file)) {
     $this->options['files'][] = $file;
  }else{
    trigger_error("Javascript file does not exist: $file");
  }
}

function add_directory($dir){
 $dir = "{$_SERVER['DOCUMENT_ROOT']}/".(ltrim($dir, "/"));
  if(file_exists($dir) and is_dir($dir)){
     foreach(new DirectoryIterator($dir) as $file_info) {
	if($file_info->isDot() or $file_info->isDir()) continue;
	if(strtolower($file_info->getExtension()) == "js") {
	   $this->options['files'][] = $file_info->getRealPath();
	}
     }
  }else{
     trigger_error("Directory does not exist");
  }
}

추 가 된 javascript 파일 읽 기
function get_source() {
    $script = "";
    foreach ($this->options['files'] as $file) {
        $script .= file_get_contents($file) . "

";     }     return $script; }

마지막 으로 압축 된 파일 을 CDN 에 올 려 놓 을 수도 있 습 니 다.
전체 코드 를 나 는 놓 지 않 겠 다. 모든 사람의 요구 가 다 르 니 역시 스스로 하 는 것 이 좋다.
-------------
구 글 온라인 의 이 기능 은 국내 가 벽 에 걸 린 것 같 습 니 다. 다운로드 버 전 을 제공 합 니 다. 자바 가 필요 합 니 다.
https://github.com/google/closure-compiler

좋은 웹페이지 즐겨찾기