2012-10-09 43 views
5

mdnJavascript [defer]屬性和document.ready?

唸叨defer屬性後,該布爾屬性設置爲指示腳本 意味着文件已經被解析後要執行的瀏覽器。

它看起來不錯。

所以我tested它反對$(function() { });$(window).load(...)

<script> 
$(function() 
{ 
    alert('1') 
}); 
$(window).load(function() 
{ 
    alert('2') 
}); 
</script> 

<script defer="defer"> 
    alert('4'); 
</script> 

此代碼始終輸出4,1,2

好吧現在我可以識別文檔被解析的時間。

在什麼情況下我需要之前的 document.ready(解析時間完成)?

+5

@downvoter請解釋一下。 –

+1

一個重要的警告:''因爲這個功能還沒有被所有其他主流瀏覽器實現,所以作者不應該認爲腳本的執行會被延遲。「' – jbabey

+1

@jbabey呀我知道。但請注意 - 它**是**將在所有主要brwser實施。因此值得了解它的行爲:-) –

回答

3

MDN

defer屬性不應該在腳本中使用的是沒有 src屬性

的實際用途是,你仍然可以在腳本在頁面頂部完全解析完畢後,讓瀏覽器加載它們,從而提高客戶端的性能。

YSlow

defer屬性表明腳本不包含 文件撰寫,是一個線索,瀏覽器,他們可以繼續 渲染

+0

爲什麼不把它們放在底部?有什麼不同 ? –

+0

@RoyiNamir,對於一些模板系統/ CMS,編寫JavaScript的人無法訪問HTML模板。此外,它簡化了元數據的組織,如果其中的大部分內容都保留在「」和「」中,則它們完全是內容。 – zzzzBov

1

退房的W3 HTML spec

async和defer屬性是布爾屬性,指出腳本應如何執行。如果src屬性不存在,則不得指定延遲和異步屬性。

因此,該屬性僅適用於外部腳本。

+0

是的。好點子。我可以引用一個包含alert命令的js文件。它只是樣品。當然你是對的! –

+0

是的,你應該這樣做來真正測試行爲 – Bergi