2011-04-19 84 views
2

<script>標籤放在關閉<body>標籤之前,將相同的標籤放置在<head>部分並指定defer="defer"屬性?JavaScript推遲

謝謝。

+0

no。 // 15個字符。 – Raynos 2011-04-19 19:05:09

回答

2

是/否。

是的,因爲放置defer標籤會一直等到文檔在執行前加載。

沒有,因爲在</body>標籤之前放置<script>並不一定意味着文檔已完全加載,因爲您可以在結束標籤和結束HTML標籤之間使用其他標籤。示例

<html> 
    <head> 
    </head> 
    <body> 
    <script>...</script> 
    </body> 
    <link/> 
    <script> 
    although it is invalid HTML most browsers will render tags outside the body. This is 
    probably more of an error in code 
    <div> some content</div> 
</html> 

此外值得注意的是,腳本標記的defer屬性在所有瀏覽器中都不起作用。

編輯:

在問候更快的頁面加載性能,你可能想看看這篇文章它提供了一些指導原則,包括在哪裏把腳本和CSS

http://developer.yahoo.com/performance/rules.html

+0

我問速度,不能在JavaScript中使用我會使用事件的DOM。放置在body之前的JavaScript對於頁面結構等是不需要的,因此可以在頁面可見之後最後加載。我不明白你在「否」部分的意思。「放置標籤之前並不一定意味着文檔已完全加載,因爲您可以在結束標籤和結束HTML標籤之間使用其他選項卡」爲什麼我會在和之間有標籤? – Francisc 2011-04-19 19:17:24

+1

@Francisc我編輯了我的答案,因爲我有幾個格式問題。對於那個很抱歉。關於你對速度的評論。我想提及的唯一項目是瀏覽器將根據需要緩存JS文件,並且實際上不會在緩存中加載js文件。使用延遲並不一定會使您受益,因爲延遲只會在頁面完全加載之前停止執行。它不會延遲調用來獲取腳本文件本身。因此,在您的實例中,您會希望將腳本標籤放在'<\body>'標籤後面以獲得更好的性能。 – 2011-04-19 21:36:21

+0

@JohnHartsock對於糟糕的跨瀏覽器支持沒有評論? – Raynos 2011-04-19 21:44:19

1

延遲要求的Gecko 1.9.1本 布爾屬性設置爲指示 到腳本意味着 文檔已 被解析後要執行的瀏覽器。由於此功能尚未由所有其他 主要瀏覽器實現,因此作者不應該使用 假設腳本的執行 實際上將被推遲。切勿從延期腳本 (因爲Gecko 1.9.2,這會將 帶走文檔)調用 document.write()。不應在不具有src屬性的腳本 上使用延遲 屬性。 由於Gecko 1.9.2,在沒有 src屬性的腳本上忽略延遲屬性 。但是,在Gecko 1.9.1即使設置了defer屬性,也會延遲內聯腳本。

當文檔完成解析並且在<body>標籤的末尾有相似但不完全相同。

注意到這一點也很重要,只適用於外部設置爲src的腳本。

+0

謝謝你,雷諾斯。 – Francisc 2011-04-19 22:50:24

1

一般是,但是瀏覽器不能保證在加載頁面後他們會執行JavaScript,除非你指定了這樣的(defer =「defer」)。

+0

我不明白,是不是我說的:他們將加載DOM後執行defer =「defer」的代碼? – Francisc 2011-04-19 19:14:52

+0

你的問題是:X和Y是一樣的東西嗎?那麼,事實上,在大多數情況下,它們將是一回事。我說的是這不能保證。也就是說,瀏覽器不會告訴你:「如果你把腳本放在最後,它會在加載後執行」。他們通常會這樣做,但如果他們在呈現頁面之前運行腳本,他們不會違揹他們的文檔,因爲這些文檔稍後沒有提到任何有關這方面的內容。 – Gabriel 2011-04-19 20:39:43

+0

謝謝,加布裏埃爾。 – Francisc 2011-04-19 22:52:03