script標籤到底該放在哪裡
轉自:http://blog.csdn.net/ybdesire/article/details/49284699
一般script標籤會被放在頭部或尾部。頭部就是<head>裡面,尾部一般指<body>裡[4-5]。 將script放在<head>裡,瀏覽器解析HTML,發現script標籤時,會先下載完所有這些script,再往下解析其他的HTML。討厭的是瀏覽器在下載JS時,是不能多個JS併發一起下載的。不管JS是不來來自同一個host,瀏覽器最多隻能同時下載兩個JS,且瀏覽器下載JS時,就block掉解析其他HTML的工作[1]。將script放在頭部,會讓網頁內容呈現滯後,導致使用者感覺到卡。所以yahoo建議將script放在尾部,這樣能加速網頁載入。 將script放在尾部的缺點,是瀏覽器只能先解析完整個HTML頁面,再下載JS。而對於一些高度依賴於JS的網頁,就會顯得慢了。所以將script放在尾部也不是最優解,最優解是一邊解析頁面,一邊下載JS。 所以[2]提出了一種更modern的方式:使用async和defer。80%的現代瀏覽器都認識async和defer屬性[3],這兩個屬效能讓瀏覽器做到一邊下載JS(還是隻能同時下載兩個JS),一邊解析HTML。他的優點不是增加JS的併發下載數量,而是做到下載時不block解析HTML。
- <script type="text/javascript" src="path/to/script1.js" async></script>
- <script type="text/javascript" src="path/to/script2.js" async></script>
帶async屬性的script會非同步執行,只要下載完就執行,這會導致script2.js可能先於script1.js執行(如果script2.js比較大,下載慢)。defer就能保證script有序執行,script1.js先執行,script2.js後執行。
結論
1. [2]認為,如果可以不考慮支援<IE9的IE,最好的做法是將script標籤放在head中,並使用async/defer屬性。這樣瀏覽器就能一邊下載JS,一邊解析其他的HTML。
2. Google自己的程式碼script放的也有點亂,有的放在</body>後面[6],有的放在<body>裡面[7],還有的放在<head>裡面[8]。總體來說,放在<body>裡其實是最常見的做法。
3. 本文只討論script的位置,至於link和style,還是放在head裡的做法比較常見。link也是要下載CSS的啊,為毛不考慮下載CSS阻塞HTML解析的問題呢?其實,一般情況下,JS和CSS,放在head和放在body區別不大。CSS的link放在body也是可以的,只是可能導致頁面暫時沒有樣式[9-10]。
參考
[1] https://developer.yahoo.com/performance/rules.html#js_bottom=
[2] http://stackoverflow.com/questions/436411/where-is-the-best-place-to-put-script-tags-in-html-markup
[3] http://caniuse.com/#search=defer
[4] https://github.com/IgorMinar/foodme/blob/master/app/index.html
[5] https://github.com/GoogleChrome/wReader-app/blob/master/index.html
[6] https://github.com/GoogleChrome/multi-device/blob/master/_preview.html
[7] https://github.com/GoogleChrome/samples/blob/b2668086c25470e107e59f4ffa92dc0c21c63de3/beacon/index.html
[8] https://github.com/GoogleChrome/web-audio-samples/blob/gh-pages/samples/audio/adaptive-release.html
[9] http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag
[10] http://stackoverflow.com/questions/1642212/whats-the-difference-if-i-put-css-file-inside-head-or-body
相關文章
- script標籤
- JavaScript <script>標籤JavaScript
- JS 之 script標籤JS
- 熟悉的< script >標籤
- 淺談script標籤
- Redis到底快在哪裡Redis
- Script標籤的async和defer
- HTML中的script標籤研究HTML
- script標籤中的async和defer
- script標籤的crossorigin屬性ROS
- MVVM 到底比 MVC 好在哪裡?MVVMMVC
- Java反射慢,到底慢在哪裡?Java反射
- 程式設計到底難在哪裡?程式設計
- 說一說 HTML 中的 script 標籤HTML
- js——<script>標籤的載入順序JS
- Proto 程式碼到底放哪裡?
- jQuery內部對<script>標籤的處理jQuery
- 中國做3A遊戲到底難在哪裡?遊戲
- 我們應該定位在哪裡?
- 大資料中臺之Kafka,到底好在哪裡?大資料Kafka
- 高階程式設計師到底強在哪裡?程式設計師
- 好的程式設計師到底好在哪裡?程式設計師
- 自媒體盈利模式到底在哪裡?模式
- 類script標籤,非同步載入,順序執行非同步
- 前端效能優化---將script標籤放在body之後前端優化
- a標籤裡面巢狀一個a標籤,點選子連結標籤時,同時觸發了父標籤a巢狀
- 基於雲的CRM系統到底好在哪裡?
- JavaScript動態建立script標籤並執行js程式碼JavaScriptJS
- 我所知道的關於 script 標籤的一切
- 頁面動態加入<script>標籤並執行程式碼行程
- 初級還是高階開發者,到底區別在哪裡?
- python標準庫模組放在哪裡?Python
- 帶你全面瞭解 Flutter,它好在哪裡?它的坑在哪裡? 應該怎麼學?Flutter
- windows10便籤怎麼開啟啊_windows10便籤在哪裡Windows
- HTTPS和HTTP有什麼區別,到底安全在哪裡?HTTP
- 阿里開源的32B大模型到底強在哪裡?阿里大模型
- php正則匹配到字串裡面的a標籤PHP字串
- 由script標籤引發了我對setTimeout非同步的思考非同步