腳本可以放在html頁面的head裡面,也可以放在body裡面。
把腳本放在body中,當瀏覽器遇見3f1c4e4b6b16bbbd69b2ee476dc4f83a標籤時,瀏覽器不知道腳本會插入文字還是html標籤,因此瀏覽器會停止分析html頁面而去執行腳本。當使用src的方式加入腳本時,瀏覽器也會做同樣的動作。在腳本處理的時候,頁面呈現和使用者互動將被完全阻止。腳本下載和執行阻塞了其他資源的下載,例如呈現頁面使用的圖片。
腳本的位置
鑑於上面的理由,腳本應該始終放在頁面的底部,即36cc49f0c466276486e50c850b7e4956前面。
一個簡單的範例:
<html> <head> <title>Script Example</title> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <p>Hello world!</p> <script type="text/javascript" src="file1.js"></script> <script type="text/javascript" src="file2.js"></script> <script type="text/javascript" src="file3.js"></script> </body> </html>
合併腳本
因為腳本下載阻塞了頁面呈現,因而應該減少頁面3f1c4e4b6b16bbbd69b2ee476dc4f83a標籤的使用,不管腳本是內聯的還是外部的。在處理外部腳本的時候情況比較特殊,瀏覽器下載一個100kb的腳本的時間將遠遠小於4個25kb的腳本,因為建立一個請求要消耗大量的時間。所以頁面應該盡量的減少外部腳本的引用。
非阻塞的腳本
秘訣在於當頁面loading完成之後再來載入腳本,也就是在window物件的onload事件觸發之前 。以下是實作的幾種方式:
1.使用defer
<html> <head> <title>Script Defer Example</title> </head> <body> <script defer> alert("defer"); </script> <script> alert("script"); </script> <script> window.onload = function(){ alert("load"); }; </script> </body> </html>
頁面彈出方塊出現的順序: script/defer/load,這個技巧的缺點是IE4+和FF3. 5+才支援。
非阻塞的腳本(續)
2. 動態腳本元素
要知道3f1c4e4b6b16bbbd69b2ee476dc4f83a和普通的html標籤並沒有本質上的區別,所以可以利用標準的DOM方法動態的新增腳本檔案引用。方法如下:
var script = document.createElement("script"); script.type = "text/javascript"; script.src = "file1.js"; document.getElementsByTagName("head")[0].appendChild(script);
當這個標籤一旦加入到html中,腳本檔就開始下載。這種方法的一個特點就是,檔案下載和執行並不阻塞html頁面其它部分的處理。通常將這樣的腳本放在93f0f5c25f18dab9d176bd4f6de5d30e中較之6c04bd5ca3fcae76e30b72ad730ca86d比較安全,尤其是檔案所包含的程式碼需要在頁面的load事件中執行。如果body的內容還沒有被完全的載入,IE也會跳出「禁止操作」的錯誤。
當腳本檔案下載完成之後,腳本立即執行(FF、Opera會等待前一個以相同方式新增的腳本執行)。當腳本自執行時,這沒什麼問題。但是如果腳本包含頁面中其它腳本使用的interfaces,你需要確認腳本已經加載完成並且可用。幸好,當獲得script標籤的src的值之後,Firefox, Opera, Chrome, and Safari 3+ 會觸發一個load事件。
var script = document.createElement("script") script.type = "text/javascript"; //Firefox, Opera, Chrome, Safari 3+ script.onload = function(){ alert("Script loaded!"); }; script.src = "file1.js"; document.getElementsByTagName("head")[0].appendChild(script);
IE則提供了另一個解--readystatechange事件。根據下載
腳本檔案所處的狀態,readyState 的值有以下幾種:
"uninitialized"
預設狀態
"loading"
開始下載
"loaded"
下載完成
"interactive"
下載完成,但並非全部可用
"complete"
所有資料可用
IE的實作方式:
var script = document.createElement("script") script.type = "text/javascript"; script.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null; alert("Script loaded."); } }; script.src = "file1.js"; document.getElementsByTagName("head")[0].appendChild(script);
以上是如何讓JavaScript載入與執行效率更高實例程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!