온라인 압축 javascript --- Google 클 로 저 컴 파 일 러
4335 단어 JavaScriptGoogle온라인
천 명의 독자 에 게 는 천 개의 햄릿 이 있 는데, 가장 좋 은 답안 이 없 으 니, 여기 서 아래 의 이 분석 을 참고 할 수 있다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.