2010-02-24 57 views
2

我正在研究一個WordPress網站,其中有兩個外部JavaScript文件在頁面的中途加載。這些文件是來自Reddit和Digg的徽章,並且通常會爲頁面的總加載時間增加約4-8秒 - 同時還會阻止加載頁面的底部50%。強制加載外部JavaScript文件(來自Digg,Reddit)最後加載

Digg和Reddit javascripts渲染一個(我認爲需要在加載完我的網頁的其餘部分之前完全加載),並因此增加了大量的額外加載時間。

我試着將<script>標籤移動到頁面底部,就在</body>之前,但徽章呈現在頁腳的下方,而不是他們需要的位置。

如何強制這兩個外部javascript文件加載最後一個,但仍然渲染他們需要的位置?

回答

0

如果渲染腳本標記不一定意味着這些腳本生成的UI出現在哪裏 - 它似乎是一個愚蠢或可疑的設計。腳本中是否有已知的函數讓你向他們提供一個容器div或其中的UI來呈現它們?

你是對的,當然,在加載它們之前,在</body>之前。這是正確的策略。

2

你可以創建一個div [「divA」]你想要你的Digg/Reddit iframe去[所以這基本上只是一個佔位符]。當頁面加載完成後,追加一個「腳本」元素,以便Digg/Reddit腳本可以加載。加載完成後,您可以將它們從正文移動到divA。

document.body.removeChild(iframe); 
document.body.getElementById("divA").appendChild(iframe); 
+0

這將導致iframe的src加載兩次。 – Nicole 2010-02-24 18:46:24

+1

+1在文檔中使用片段'document.write',並使用DOM將它移動到正確位置聽起來像是最聰明的解決方案。雖然也許不會刪除元素,但是將它全部放在一個DIV中,將*移動到正確的位置? – 2010-02-24 18:47:33

+0

Renesis你提出了一個有效的觀點。謝謝。你將如何「移動」元素?我想你可以使用javascript的offsetTop,offsetLeft和parentNode來查找「臨時」div的x/y位置並將iframe覆蓋在它上面。 – Warty 2010-02-24 19:00:38

0

快速回答是 - 沒有簡單的方法。如果您在腳本標記上使用defer="true",並且它們使用document.write,則它仍會寫出加載時的內容,而不是插入腳本標記的位置。

一些在這個問題的答案可以幫助你:How can I stop an IFrame reloading when I change it's position in the DOM?

一些在此線程的其他答案建議您刪除的iframe,然後重新插入。但是,這會導致您直接遇到上述鏈接問題中的問題 - 這會導致iframe的內容加載兩次。

一般方法是將佔位符放在需要的位置,然後在準備就緒時將它們移動到佔位符中。