0

두 가지 버전의 자바 스크립트 파일이 있습니다. 하나는 정상적으로 작동하고 다른 하나는 느리게 수행됩니다. 나는 두 파일 모두에서 Closure Compiler를 시도했지만 ... 왜냐하면 나는 멍청하기 때문에 몇 달 후에 좋은 버전의 원본 파일이 누락되었음을 알게되어 기뻤다. 내 하드 디스크뿐만 아니라 내 기억에서도 (나는 어떤 변화가 있었는지 기억이 안납니다.) 그래서클로저 컴파일러에서 코드 재구성

지금 내가 가진 다음 작업 파일의

    • 압축 코드를
    • 나쁜 작업 파일의
    • 압축 코드
  1. 나쁜
    • 압축 코드 작업 파일

나는 기꺼이, 두 개의 압축 된 버전 사이에 약간의 차이가 정말있다, 잘 작동하는 소스 파일을 재구성 할 필요가있다.

여기 내가 당신의 도움이 필요한 곳입니다.

내가 나쁜에 이렇게 가고

(function() { 
// same stuff here  
})(); 

requestAnimFrame(O); 

코드

그래서
B.onload = function() { 
// same stuff here 
}; 
requestAnimFrame(O) 

압축 워킹 압축 코드를 작업 이 발견, 폐쇄 컴파일러는 어떻게 정확하게 선언 할 수 있습니다 함수 이름없이? 그리고 함수 선언의 끝에는 ();이 무엇입니까? 압축되지 않은 코드는 어떻게 구현됩니까? 그것은 도움이 될 경우이는 (내가 해결하기 위해 희망하는) 압축되지 않은 잘못된 버전처럼 보이는 방법입니다

function init() { 
// same stuff here 
} 

B.onload = function(){ 
start() 
} 

function start() { 
init() 
requestAnimFrame(0); 
} 

사용자가 스스로의 차이를 테스트하려면, here's the result when using the good codehere's the result when using the bad code

시도 로고를 클릭하십시오 : 첫 번째 링크에서 큐브가 더 빨리 빠져 나옵니다. 좋은 CPU를 가지고 있다면 비주얼을 실행할 때 죽지 않아야합니다. 두 번째 링크는 반대로 CPU에 과부하가 걸리고 애니메이션에서 계속 진행될 때 다른 디스플레이가있는 것으로 보입니다 (이 두 번째 문제는 코드에서 차이점을 발견하고 내가 변경 한 것을 기억하고 있습니다).

+1

'(function() {...})()'은 즉시 실행되는 래퍼 클로저입니다. 'onload' 이벤트가 발생하기를 기다리는 대신 래퍼 클로저 내에서 즉시'start()'를 호출하는 변경을 한 것 같습니다. –

답변

3

"그렇다면 Closure Compiler는 이름없이 함수를 얼마나 정확하게 선언 할 수 있습니까?"

JavaScript는 익명 함수를 지원하기 때문에. 이벤트 처리기를 할당 할 때 꽤 자주 사용했을 것입니다.

"그리고 그 함수의 선언 끝에 ();은 무엇입니까?"

그들은 어떤 기능 후에 그들이 것 같은 일을. 그들은 그것을 호출합니다. 그것은 "선언"기능이 아니지만. 함수는 괄호 안에 싸여 있으므로 익명 함수 입니다.

"압축되지 않은 코드는 어떻게 구현됩니까?"

이는 압축되지 않은 코드에 따라 달라집니다. 사람들은 정상적인 코드에서이 패턴을 자주 사용합니다. 코드를 실행할 수있는 로컬 변수 범위를 만듭니다.

+0

결국 오류가 코드의 다른 부분에 있음을 발견했습니다. 어쨌든 고마워, 내 질문에 대답 :) – Saturnix

+0

당신은 오신 것을 환영합니다. –

0

차이점은 나쁜 사람이 "똑같은 물건"을하기 전에 B가로드되기를 기다리는 것이고, 좋은 사람은 즉시 그것을하는 것입니다.