1. 程式人生 > >link元素也會阻塞DOM解析

link元素也會阻塞DOM解析

今天, 我們都瞭解javascript是如何工作的. 我們知道script元素會阻塞渲染(實際是上阻塞解析, 因此延遲了渲染). 於是我們把script元素放到了文件末尾. 但是你知道link元素也會阻塞解析嗎?

(document.write會影響DOM樹, 因此解析需要確認這些是同步進行的)

在過去我們不太可能引用其他網站的css樣式, 但是到了今天情況改變了. 現在我們可以使用提供字型的web service, 因此就需要在head元素中引用其他網站的service url作為css樣式.

如果這個服務因為某些原因中斷了, 你的頁面也會受到影響. 我們一直混在javascript社群裡工作來想辦法避免這些問題, 現在我們需要在css這裡做同樣的事情了

例子

這個url演示了阻塞過程http://jsbin.com/agumu4/3/ – 要確定你開啟了web console, 再重新整理來看狀態的變化

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <!DOCTYPEhtml> <html> <head> <metacharset=utf-8/> <title>Hangtest</title> <script> // script in head to debug state change
console.log('doc state: '+document.readyState); document.onreadystatechange=function(){ &nbsp;console.log('doc state change: '+document.readyState); }; </script> <link href="http://hang.nodester.com/hang.css?5000"rel="stylesheet"/> </head> <body> &nbsp;<p>Hello
World</p> </body> </html>

測試

我建立了一個簡單的延遲service, 它執行在Node上因此不用擔心他會阻塞整個機器(相反php的sleep會使整個伺服器阻塞)

當你不能看到console的輸出時, 要確定DOM何時被讀取的最好方法就是監聽readystatechange事件. 因此在我的測試中, 我引入了一些指令碼來告訴我DOM到了哪個狀態了, 並且我可以看到link元素是否阻塞了.