2013-07-01 32 views
0

谷歌網頁速度告訴我,我應該Defer parsing of JavaScriptappendChild被調用時是否解析了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(); 

} 

我可以100%肯定,我的劇本已經被加載併成功地解析之前myinitialization()不會被調用?否則,解決方案是什麼?

+0

如果我理解正確,你問我們如何確定創建元素和附加'src'屬性,導致在調用myinitialization()之前加載該內容。 ? –

+0

是的,myInitialization()調用兩個腳本中定義的函數。 – JVerstry

+0

我不記得這些調用是否是同步的,但通常當某些事情依賴於另一個調用時,您會聽取'load'事件 – Ian

回答

0

根據菲利克斯,答案是否定的。我不能依靠在撥打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

相關問題