Re: [問題] 把CSS或JS的import放在html最後端?

作者: eight0 (欸XD)   2014-12-31 17:05:53
這問題就是把 CSS 放在 head 內與 放在 body 內的差別而已。
在 HTML4 之前,link 是規定要放在 head 內的,
到 HTML5 才有關於放在非 head 內的標準。
當放在 head 內時,瀏覽器會在 render body 前就先把 CSS parse 完,
所以在載入 CSS 前會把 render 擋住。這樣只需要 render 一次。
當放在 body 內時,瀏覽器會等 CSS parse 完後再重新 render,
也就是說,在 body 內放 N 個外連 CSS,瀏覽器就會 render N+1 次。
所以你可以根據狀況選擇,例如說對於行動產品,你可能希望 render
次數盡量少;對於其它特殊情況,你可能希望有些載入很久、又不影響
版面的 CSS 可以晚一點載入。
就我所知,不遵守這行為的瀏覽器有舊 Opera,它總是在載入 CSS 後重新
render(因為重繪超快?);和上篇測試的 Chrome。
另外放 body 內,DOMContentLoaded 事件會在第一次 render,還沒載完
CSS 的時候就發動了,所以有些關於樣式的 JavaScript 效果可能會套用
不到。
當然這也包括 Opera,所以我記得 jQuery 在做 Opera 的 ready() 時,
還會特別去檢查 CSS 載入完成了沒。
> 因此如果你把 CSS 放在最後,瀏覽器越晚讀到,自然會越慢開始下載
> 而引響到 CSSOM 的建構,最後就會導致整體 Render Tree 建構的速度 delay。
嚴格來說這是對的,但是除非你的網站輸出很慢,我不覺得 parse html 時放前、
後的時間會差到哪去。大部份的時間都是卡在︰
→ alog: 然後再怎麼快都沒用,大部份卡在你的file 跟 domain name 12/30 01:00
→ alog: 跟你那台server的位置決定大部份的速度 12/30 01:00
另外根據
→ mmis1000: https://test-mmis1000.c9.io/normal1.html 12/31 01:50
如果要在 Chrome 內製造延遲載入效果,還是用 JavaScript 去做比較安全。
(我今天才知道!)
作者: alog (A肉哥)   2013-12-30 01:00:00
然後再怎麼快都沒用,大部份卡在你的file 跟 domain name跟你那台server的位置決定大部份的速度
作者: mmis1000 (秋月戀楓)   2013-12-31 01:50:00
作者: cyclone350 (老子我最神)   2014-12-31 23:34:00
opera總是載入後重新render,應該是符合標準吧!?
作者: oj113068 (橘子汁)   2013-01-03 14:04:00
感覺這一串討論該M。
作者: mmis1000 (秋月戀楓)   2013-01-03 15:52:00
cyclone350,問題是script可能對css有依存性,不照順序可能會造成不可預期的結果

Links booklink

Contact Us: admin [ a t ] ucptt.com