2012-09-03 16 views
3

假設你有一個HTML文件中的以下內容:在HTML中,如果第二次加載相同的腳本文件,是否仍會加載?

<script type="text/javascript" src="whatever.js"></script> 
<script type="text/javascript" src="whatever.js"></script> 

whatever.js加載第二次,或將瀏覽器中看到的是它已經被加載並跳過重新加載它?

注意:由於我使用的HTML模板包含其他代碼片段,其中一些代碼片段可能會加載相同的腳本,導致可能的重複。我想確保我的頁面不會被重複的腳本加載。

+0

AFAIK它將被加載兩次。將頁面加載到螢火蟲中,然後在NET標籤中查找(或在Chrome中查看) – mplungjan

+1

你試過了嗎? – wohanley

+0

我猜緩存控制會產生影響;您正在具體詢問的問題是* parser *是否意識到了相同的文件請求?此外,這個小提琴似乎與該文件,我已經包括它實際上只下載最初(由於緩存):http://jsfiddle.net/L55j3/ –

回答

2

這取決於你的意思:

var loaded = {}; 

然後。

如果你想避免兩次打到服務器,那麼在服務器上設置正確的緩存控制將避免文件被下載兩次。

如果你想避免文件被執行兩次,那麼答案是否定的:瀏覽器不會跳過第二次執行該文件。你可以通過在一個巨大的'if'語句中包裝文件來解決這個問題,並檢查一個全局變量或HTML元素來測試文件是否已經被加載過。

3

是的,它會重新加載它。您可以執行的操作是檢查當前腳本元素是否已在顯示在您已記錄的「已加載」列表中:http://jsfiddle.net/kvPcU/1/

某處你的頁面的頂部,你獲取的文件之前:通過「跳過」裝載

var elements = document.getElementsByTagName('script'); 
var currentElement = elements[elements.length - 1]; // element of currently executing script 
if(!loaded[currentElement.src]) { 
    loaded[currentElement.src] = true; 
    // run code 
} 
+0

+1感謝您的答案和示例代碼! – Ghopper21

相關問題