2008-09-16 8 views
5

대규모 GWT 프로젝트에서 JavaScript의 일부분을 게으른 것으로로드 할 수 있습니까? 오버레이와 같습니다.gwt 지연로드

PS : Iframe은 해결책이 아닙니다.

+0

학자 인 (25:30 시간 정도) – GEOCHET

답변

0

나는 이것이 당신이 찾고있는 것이라고 생각합니다.

<body onload="onloadHandler();"> 
<script type="text/javascript"> 
function onloadHandler() { 
    if (document.createElement && document.getElementsByTagName) { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = './test.js'; 
     var heads = document.getElementsByTagName('head'); 
     if (heads && heads[0]) { 
      heads[0].appendChild(script); 
     } 
    } 
} 
function iAmReady(theName) { 
    if ('undefined' != typeof window[theName]) { 
     window[theName](); 
    } 
} 
function test() { 
    // stuff to do when test.js loads 
}   
</script> 

은 -

iAmReady('test'); 

테스트 및 Windows, IE 6와 오페라 9.52 파이어 폭스 2, 사파리 3.1.2에서 작업 test.js. 나는 그것들의 업 레벨 버전이 잘 작동한다고 가정한다.

로드가 비동기임을 유의하십시오. appendChild()을 호출 한 직후로드 된 파일에서 함수 또는 변수를 사용하려고하면 스크립트가 완료 될 때 초기화 함수가 실행되도록로드 된 스크립트 파일에 콜백이 포함 된 것입니다. 로드.

로드 된 스크립트의 맨 아래에있는 내부 함수를 호출하여로드 된 스크립트를 수행 할 수도 있습니다.

0

로드하는 모듈에 필요한 (또는 오히려 필요할 수있는) 모든 Java 코드가 단일 JavaScript 파일로 컴파일되므로 GWT가이를 쉽게 지원하지 않습니다. 이 단일 JavaScript 파일은 클 수 있지만 중요하지 않은 모듈의 경우 JavaScript로 작성된 동급 파일보다 작습니다.

생성 된 단일 JavaScript 파일이 너무 큰 시나리오가 있습니까?

0

응용 프로그램을 여러 개의 GWT 모듈로 나눌 수 있지만 모듈간에 코드를 공유하는 기능이 제한된다는 것을 기억해야합니다. 따라서 한 모듈이 다른 모듈이 참조하는 동일한 클래스를 참조하는 클래스가있는 경우 공통 클래스의 코드가 두 번 포함됩니다.

효과적으로 모듈은 두 개의 개별 클래스 로더를 통해 같은 클래스를로드하면 Java에서 얻는 것과 유사한 자체 네임 스페이스를 만듭니다. 실제로 GWT 컴파일러는 코드에서 참조되는 메소드 (즉, 불필요한 코드 제거)에서만 컴파일되기 때문에 하나의 모듈에는 공통 클래스에서 다른 모듈로 다른 메소드 서브 세트가 포함될 수 있습니다.

하나의 모 놀리 식 모듈로 모든 모듈을로드할지 여부를 결정해야하며 누적 코드 크기가 단일 모듈 방식보다 훨씬 클 수있는 모듈이 여러 개있는 것이 좋습니다.

GWT는 사용자가 동일한 버전의 모듈을 한 번만로드해야하므로 (이후에 캐시 됨) 대부분의 경우 선행 적중이 바람직합니다.

0

iPhone 또는 iPod touch를 사용하여 "하나의 선행"방식으로 큰 GWT 응용 프로그램을로드하려고하면 절대로드되지 않습니다.

모듈 방식은 관리가 더 복잡하지만 더 작은 클라이언트 장치의 경우 더 좋습니다.

이제 iFrame을 사용하지 않고 Java 코드에서 모듈을로드하려면 어떻게해야합니까?

  • 에릭