2011-09-07 71 views
2

我聽說網頁上的javascripts文件沒有並行下載,所以我在firefox上用firebugs做了一些實驗。不過,我沒有看到的JavaScript進行平行donwloaded,和我的網頁包含在舊FASION方式sripts:javascript並行加載

<head> 
    <meta charset="utf-8" /> 
    <title>Home Page</title> 
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> 
    <script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script> 
</head> 

自從我讀寫於2009年的文章,如果有的話後改變了我想知道的,還是火狐以不同的方式加載了javascripts?

感謝

回答

2

這不是關於下載,但對解析和執行。如果第二個Javascript文件依賴於在第一個Javascript文件中設置的某個全局變量,那麼它將無法執行,甚至在第一個Javascript文件加載之前沒有完全解析。由於瀏覽器沒有簡單的方法來確定是否存在這樣的依賴關係,因此安全的方法是依次解析和執行文件。

由於有可能執行document.write()命令並且通常會修改DOM,所以在解析和執行Javscript時,HTML的解析和呈現也必須等待。

有一些黑客如this會動態添加一個新的腳本定義,並行加載和解析。更優雅的是defer attribute,但瀏覽器並不都是一樣的。

5

瀏覽器會下載資源(圖片,腳本,框架等)在平行(上下一些最大數量的人同時),但一些資源,如腳本資源是不安全的解析和並行執行因爲它們可能已經被寫入以特定順序執行。因此,雖然瀏覽器可以並行加載腳本標記,但它會一直等待,直到它可以按順序執行它們(假設它們是正常的內聯腳本標記,沒有任何特殊屬性(如「延遲」或「異步」))。但是,即使在這些情況下(webworkers除外,這裏不討論討論的內容),javascript是單線程的,所以一次只能執行一段JavaScript。

0

一般腳本不加載並聯,因爲有時加載順序很重要。

腳本元件阻擋進步的網頁下載。瀏覽器一次下載幾個 組件,但是當它們遇到外部腳本時,它們將停止進一步下載,直到腳本文件被下載,解析並執行。

然而,有一些方法可以讓腳本下載並行:

作爲一個側面說明,有一些共同的屬性,開發商往往與 <script>元素的使用方法: [...]

  • defer (更棒的是,HTML5的async)也是一個辦法,雖然沒有得到廣泛的支持,以 指定下載的外部腳本文件將不會阻礙 頁面的其餘部分。