2013-07-01 7 views
0

Google 페이지 속도는 내가해야한다고 말해줍니다. Defer parsing of JavaScript.appendChild가 호출 될 때 javascript가 구문 분석됩니까?

헤더에 두 개의 외부 Javascript가로드되고 내 문서 하단에 초기화 함수가 호출됩니다.

내가 구글의 권장 사항을 따른다면, 나는 /이 같은 기능을 만들 수 있어야합니다

function downloadJSAtOnload() { 

    var element = document.createElement("script"); 
    element.src = "myscript1.js"; 
    document.body.appendChild(element); 

    element = document.createElement("script"); 
    element.src = "myscript2.js"; 
    document.body.appendChild(element); 

    myinitialization(); 

} 

내가 내 스크립트를로드 성공적으로 분석되기 전에 myinitialization()가 호출되지 않습니다 것을 100 % 확신 할 수 있습니까? 그렇지 않으면 해결책은 무엇입니까?

+0

정확하게 이해한다면, 요소 생성과'src' 속성의 첨부가'myinitialization()'호출 이전에로드 된 내용으로 연결된다는 것을 어떻게 확신 할 수 있는지 묻는 것입니다. ? –

+0

예, myInitialization()은 두 스크립트에 정의 된 함수를 호출합니다. – JVerstry

+0

이 호출이 동기인지 아닌지는 기억이 나지 않습니다. 일반적으로 다른 호출에 의존하는 경우에는 'load' 이벤트를 수신합니다. – Ian

답변

0

펠릭스 (Felix)에 따르면 대답은 '아니오'입니다. myinitialization(); 호출 전에 추가 된 코드가 실행된다는 사실에 의존 할 수 없습니다.

해결책은 한 파일에 코드를 래핑하고 async을 사용하는 것입니다.

1

일반적으로 문서 끝에 ('태그 앞에) 스크립트 파일을 포함 시키면 충분합니다.

 ... 
     <script src="myscript1.js"></script> 
     <script src="myscript2.js"></script> 
     <script> 
      myinitialization(); 
     </script> 
    </body> 
</html> 

즉, 스크립트가 다운로드되기 전에 문서가로드되지만 실행 순서가 보장된다는 의미입니다.

+0

하지만 '실제'지연된 파싱을 구현하는 것보다 로딩 시간이 '많이'더 길어질 것이라고 생각합니까? – JVerstry

+0

@JVerstry - 그것을 측정하십시오. - 당신이 진정한 차이를 발견하면 놀랄 것입니다. – Fenton

+0

'myscript1.js'와'myscript2.js'를 결합하고 축소하여 하나의 HTTP 요청을 줄이면 페이지를 빠르게 만들 수있을 것입니다. – Fenton