script 標簽到底該放在哪里

一般script標簽會被放在頭部或尾部。頭部就是<head>里面,尾部一般指<body>里。

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

將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

轉自:https://blog.csdn.net/ybdesire/article/details/49284699?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448521.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

棧在表達式計算過程中的應用

棧在表達式計算過程中的應用 &#xff1a;建立操作數棧和運算符棧。運算符有優先級。 規則&#xff1a; 自左至右掃描表達式&#xff0c;凡是遇到操作數一律進操作數棧。 當遇到運算符時&#xff0c;如果它的優先級比運算符棧棧頂元素的優先級高就進棧。反之&#xff0c;取出…

Python-02-基礎知識

一、第一個Python程序 【第一步】新建一個hello.txt 【第二步】將后綴名txt改為py 【第三步】使用記事本編輯該文件 【第四步】在cmd中運行該文件 print("Hello World!") 強調&#xff1a;python解釋器執行程序是解釋執行&#xff0c;即打開文件讀內容&#xff0c;因…

數據結構之樹的一些基本操作

樹是由根結點和若干顆子樹構成的。樹是由一個集合以及在該集合上定義的一種關系構成的。集合中的元素稱為樹的結點&#xff0c;所定義的關系稱為父子關系。父子關系在樹的結點之間建立了一個層次結構。在這種層次結構中有一個結點具有特殊的地位&#xff0c;這個結點稱為該樹的…

利用FS寄存器獲取KERNEL32.DLL基址算法的證明(ZZ)

轉自&#xff1a;http://blog.csdn.net/int2e/archive/2008/01/09/2032732.aspxFS寄存器指向當前活動線程的TEB結構&#xff08;線程結構&#xff09; 偏移 說明 000 指向SEH鏈指針 004 線程堆棧頂部 008 線程堆棧底部 00C SubSystemTib 010 FiberData 014 ArbitraryUse…

很老很老的老偏方,小病一掃光

1、洋蔥、生姜治頭皮屑 ①將一個的洋蔥頭用紗布包好&#xff0c;用它揉擦頭皮&#xff0c;24小時后用溫水洗頭&#xff0c;即可止頭癢&#xff0c;除頭皮屑。 ②先將生姜切片&#xff0c;放入鍋里煮沸&#xff0c;待水溫不燙的時候倒上適量醋&#xff0c;加水洗頭。 2、小白果…

script 放置最佳位置以及 html 執行順序

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 看到知乎上有很多討論關于javascript位置的文章。所以特意留意了這方面的問題。 首先要了解到的是&#xff1a; html文件是自上而下的執…

677A

#include <stdio.h> int main() {int n, h;scanf("%d%d", &n, &h);int temp, width0;int i;for(i0; i<n; i){scanf("%d", &temp);if(temp<h)width;elsewidth2;}printf("%d\n", width);return 0; }轉載于:https://www.cn…

數據結構之二叉樹的一些基本操作

二叉樹是樹的特殊一種&#xff0c;具有如下特點&#xff1a;1、每個結點最多有兩顆子樹&#xff0c;結點的度最大為2。2、左子樹和右子樹是有順序的&#xff0c;次序不能顛倒。3、即使某結點只有一個子樹&#xff0c;也要區分左右子樹。 頭文件 BTree.h #ifndef __BTREE_H__ …

【Arduino】使用C#實現Arduino與電腦進行串行通訊

在給Arduino編程的時候&#xff0c;因為沒有調試工具&#xff0c;經常要通過使用串口通訊的方式調用Serial.print和Serial.println輸出Arduino運行過程中的相關信息&#xff0c;然后在電腦上用Arduino IDE的Serial Monitor來查看print出來的信息。Serial Monitor不僅可以接受Ar…

虛擬機NAT模式聯網

阿里開源鏡像軟件&#xff1a;https://opsx.alibaba.com/mirror 如何使VMware ip與本機ip處于同一網段 https://blog.csdn.net/kakuma_chen/article/details/71425620 轉載于:https://www.cnblogs.com/cdy0626/p/11131440.html

VS2008下最新X264(svn 2009.9)編譯不過的解決辦法

總有人說最新的版本 編譯不過&#xff0c;搞的群、 論壇里到處都是這種求助貼。建議斑竹把這個解決辦法放到醒目的位置&#xff0c;以減少噪音。科普開始1、編譯問題由于MS的VS編譯器對C99標準支持不好&#xff0c;不支持函數當中混合定義、聲明變量。解決辦法&#xff1a;在函…

node、npm、vue安裝 -- VUE 項目 demo 實例

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 安裝node&#xff1a; sudo yum install epel-release sudo yum install nodejs node --version // 安裝好后查看版本2. 安裝 npm …

用C語言實現簡單的停車場管理

這個程序是利用棧和循環隊列實現的&#xff0c;自己得先處理好邏輯關系就好了。由于題目沒有要求&#xff0c;這個程序就沒加重復判斷&#xff0c;比如一輛車已經停在車位上或者便道上&#xff0c;再來一輛就判斷不了了。關于棧&#xff0c;就是先進后出的思想&#xff0c;隊列…

推薦一個配置linux服務的網站

該網站的各種linux服務的配置都是基于CentOS系統的 基本上各種linux服務都有了 http://www.server-world.info/en/轉載于:https://www.cnblogs.com/Skyar/p/3582389.html

mariadb數據庫增刪改查

1.常用數據類型 1&#xff09;整數:int, bit 2&#xff09;小數:decimal    #decimal(5,2)表示共有五位數&#xff0c;保留兩位小數 3&#xff09;字符串:varchar, char   4&#xff09;日期時間:date, time, datetime 5&#xff09;枚舉類型(enu…

為什么你工作努力卻沒有起色?

成為職場達人&#xff0c;未必要經常挑燈夜戰。相反&#xff0c;注意到下面幾條&#xff0c;會讓你少走彎路。 1&#xff09;成長的機會永遠比眼前的待遇重要——做重要的事比多拿錢重要。 我知道在水木bbs上的worklife版本&#xff0c;每天都在上演的就是比較自己的第一個o…

《 Spring 實戰 》(第4版) 讀書筆記 (未完結,更新中...)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Pxx 表示在書的第 xx 頁。 Spring 框架的核心是 Spring 容器。 1. (P7.) 構造器注入是依賴注入的方式之一。 緊耦合&#xff1a;在 …

數據結構排序法之希爾排序法(Shell Sort)

希爾排序&#xff0c;也叫遞減增量排序&#xff0c;是插入排序的一種更高效的改進版本。希爾排序是不穩定的排序算法。 希爾排序是基于插入排序的以下兩點性質而提出改進方法的&#xff1a; 1、插入排序在對幾乎已經排好序的數據操作時&#xff0c;效率高&#xff0c;即可以達…

Windows To Ghost系統封裝之必備軟件集 - 好壓

好壓壓縮軟件&#xff08;HaoZip&#xff09;是強大的壓縮文件管理器&#xff0c;是完全免費的新一代壓縮軟件&#xff0c;相比其它壓縮軟件系統資源占用更少&#xff0c;有更好的兼容性&#xff0c;壓縮率比較高。 它提供了對ZIP、7Z和TAR文件的完整支持&#xff0c;能解壓RAR…

js 彈窗并定時關閉

1. $(input).click(function() {prompt(點擊成功, 2000) })function prompt(newName, time, fn) {var $div $(<div></div>);$div.css({position: fixed,top: 0,left: 0,width: 100%,height: 100%,z-index: 200,background-color: rgba(0,0,0,0.4),// background-c…