?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
傳統(tǒng)上,在瀏覽器中,HTML解析器已經(jīng)在主線程上運行,并在</script>
標(biāo)記后被阻塞,直到腳本從網(wǎng)絡(luò)中檢索并執(zhí)行。Firefox 4及更高版本中的HTML解析器支持對主線程進行推測性解析。在腳本被下載和執(zhí)行時,它會提前解析。與Firefox 3.5和3.6中一樣,HTML解析器會為流中發(fā)現(xiàn)的腳本,樣式表和圖像啟動推測加載。但是,在Firefox 4及更高版本中,HTML解析器還推測性地運行HTML樹構(gòu)建算法。好處在于,當(dāng)推測成功時,不需要重新分析已經(jīng)掃描的用于腳本,樣式表和圖像的傳入文件的部分。不利的一面是,當(dāng)投機失敗時,失去更多的工作。
這份文件可以幫助您避免那些使猜測失敗并減緩頁面加載速度的對象。
只有一個規(guī)則可以使鏈接腳本,樣式表和圖像的投機加載成功:
如果使用<base>
元素來覆蓋頁面的基本URI,請將該元素放置在文檔的非腳本部分中。不要通過document.write()
或添加它document.createElement()
。
當(dāng)document.write()
更改樹構(gòu)建器狀態(tài)時,推測樹構(gòu)建失敗,使得</script>
標(biāo)記之后的推測狀態(tài)在document.write()
解析所有插入的內(nèi)容時不再成立。但是,只有不尋常的用途document.write()
會造成麻煩。以下是要避免的事情:
不要寫不平衡的樹。<script>document.write("<div>");</script>
不好。<script>document.write("<div></div>");</script>
沒問題。
不要寫未完成的標(biāo)記。<script>document.write("<div></div");</script>
不好。
不要以回車完成你的編碼。<script>document.write("Hello World!\r");</script>
不好。<script>document.write("Hello World!\n");</script>
沒問題。
請注意,寫入平衡標(biāo)簽可能會導(dǎo)致其他標(biāo)簽被推斷,導(dǎo)致寫入不平衡。例如<script>document.write("<div></div>");</script>
,head
元素內(nèi)部將被解釋為<script>document.write("</head><body><div></div>");</script>
不平衡。
不要格式化表格的一部分。<table><script>document.write("<tr><td>Hello World!</td></tr>");</script></table>
不好。但是,<script>document.write("<table><tr><td>Hello World!</td></tr></table>");</script>
沒關(guān)系。
TODO:其他格式化元素內(nèi)的document.write。