js基礎(chǔ)

css和js 在網(wǎng)頁中的放置順序

js在網(wǎng)頁的放置順序

對于外部js的文件放置時(shí)丽啡,應(yīng)該全部放在<head>標(biāo)簽內(nèi)。但是這樣的話驻仅,意味著必須等著全部的js代碼都被下載其徙、解析唯灵、執(zhí)行完成后丰泊,才能呈現(xiàn)頁面的內(nèi)容(瀏覽器在遇到<body>標(biāo)簽時(shí)才開始呈現(xiàn)內(nèi)容)薯定。對于那些需要很多js 的頁面來說,這無疑會導(dǎo)致瀏覽器在呈現(xiàn)頁面時(shí)出現(xiàn)明顯的延遲瞳购,而延遲期間的瀏覽器窗口中將是一片空白话侄,為了避免這個(gè)問題,有時(shí)候會把外部的js文件放在<body>元素中頁面內(nèi)容的后面学赛。

css在文件中的放置順序

CSS一般放置在head標(biāo)簽內(nèi)满葛,要是頁面在無CSS渲染的情況下先下載html的話將會面目全非,樣式先行的話在加載html內(nèi)容的時(shí)候可以同時(shí)渲染樣式罢屈,避免fouc。
當(dāng)css樣式表和js外部文件同時(shí)在head標(biāo)簽中時(shí)篇亭,css樣式表應(yīng)該放置在js外部文件的上面

白屏和FOUC

當(dāng)把css樣式表放在底部或者使用@import方式引入樣式缠捌、或?qū)s放在頭部造成其他內(nèi)容阻塞加載時(shí):

  • 一些瀏覽器例如chrome和ie,它的加載和渲染機(jī)制是等頭部的js 和底部的CSS全部加載解析完成后再渲染展示頁面译蒂,而這個(gè)等待的時(shí)間就是白屏曼月。

  • 另一些瀏覽器例如firefox,它會在CSS未加載前先展現(xiàn)頁面柔昼,等CSS加載后再重繪一次哑芹,這就造成了無樣式內(nèi)容閃爍(逐步加載無樣式的內(nèi)容,等CSS加載后頁面突然展現(xiàn)樣式)
    解決方法就是在head中運(yùn)用css樣式表捕透。

async和defer的作用及其區(qū)別

加載

即獲取資源文件的過程聪姿,不同的瀏覽器以及不同的版本在實(shí)現(xiàn)這一過程中會有不同的實(shí)現(xiàn)效果碴萧。
加載過程中遇到外部的CSS文件,瀏覽器另外發(fā)出一個(gè)請求來獲取CSS文件末购。
遇到圖片資源瀏覽器也會發(fā)出另外的一個(gè)請求來獲取圖片資源這是異步請求破喻,并不會影響html文檔進(jìn)行加載,但是當(dāng)文檔加載過程中遇到j(luò)s 文件盟榴,html文檔會掛起渲染(加載解析渲染同步)的線程曹质,不僅要等待文檔中js文件加載完畢,還要等待解析執(zhí)行完畢擎场,才可以恢復(fù)html文檔的渲染線程羽德。

延遲腳本

html4.01為<script>標(biāo)簽定義了defer屬性,這個(gè)屬性的用途就是腳本會被 延遲到整個(gè)頁面都被解析完畢后再運(yùn)行迅办,因此宅静,defer屬性告訴瀏覽器立即下載但是延遲執(zhí)行。在現(xiàn)實(shí)中礼饱,兩個(gè)延遲腳本的話坏为,不一定按照順序執(zhí)行,因此最好只包含一個(gè)延遲腳本镊绪。
defer屬性只適用于外部腳本文件匀伏。ie4~ie7還支持對嵌入腳本defer屬性的支持,但是ie8及之后的版本則只適用于外部腳本的文件蝴韭。
在xhtml文檔中够颠,要把defer屬性設(shè)置為defer="defer"。

異步腳本

html5為<script>元素定義了async屬性榄鉴,這個(gè)屬性與defer屬性類似履磨,都用于改變處理腳本的行為。同樣與defer類似庆尘,async只適用于外部腳本文件剃诅,并告訴瀏覽器立即下載文件。但與defer不同的是驶忌,標(biāo)記為async的兩個(gè)腳本并不保證按照指定的它們的先后順序執(zhí)行矛辕。第二個(gè)腳本可能會在第一個(gè)腳本之前執(zhí)行。指定async屬性的目的就是不讓頁面等待兩個(gè)腳本下載和執(zhí)行付魔,從而異步加載頁面的其他內(nèi)容聊品。

簡述網(wǎng)頁的渲染順序

如何渲染一個(gè)網(wǎng)頁

  1. 在瀏覽器輸入要訪問的網(wǎng)頁的url;
  2. 瀏覽器開始解析url几苍,找尋其所屬的協(xié)議翻屈,主機(jī)所在,所用的端口以及對應(yīng)的路徑妻坝;
  3. 瀏覽器通過進(jìn)行dns查詢將域名轉(zhuǎn)為ip地址伸眶;
  4. 瀏覽器開啟對應(yīng)的通信端口并與解析出來的ip地址相連(通常會使用80端口)惊窖;
  5. 當(dāng)建立鏈接后,就會向主機(jī)地址發(fā)送一個(gè)http請求赚抡,包含了一些瀏覽器的基本屬性和網(wǎng)頁參數(shù)等爬坑。
  6. 主機(jī)將請求接收并轉(zhuǎn)發(fā)給監(jiān)聽對應(yīng)端口的服務(wù)器;
  7. 服務(wù)器解析請求路徑涂臣,并根據(jù)設(shè)定的配置將其轉(zhuǎn)交給對應(yīng)的處理器處理(具體會根據(jù)不同語言而有所區(qū)別:php,pyhton等)
  8. 處理器接收請求盾计,并著手準(zhǔn)備回應(yīng)請求;
  9. 根據(jù)具體情況赁遗,處理器可能會需要鏈接數(shù)據(jù)庫獲取數(shù)據(jù)來構(gòu)建回應(yīng)的內(nèi)容(鏈接數(shù)據(jù)庫-》執(zhí)行查詢-》獲取并解析數(shù)據(jù)-》關(guān)閉數(shù)據(jù)庫鏈接)署辉;
  10. 將所有的數(shù)據(jù)整合構(gòu)成回應(yīng)主體(對于網(wǎng)頁而言是html字符串),加上必須要的元信息(http的header)岩四,以同樣的協(xié)議返回給用戶的瀏覽器哭尝;
  11. 瀏覽器接收回應(yīng)的內(nèi)容,根據(jù)回應(yīng)的狀態(tài)剖煌,如果有錯(cuò)誤則進(jìn)行處理材鹦,若無則進(jìn)行解析。
  12. 瀏覽器會根據(jù)獲得的內(nèi)容(多數(shù)情況下為html)生成一個(gè)dom樹耕姊;
  13. 然后針對其內(nèi)引用的外部資源逐個(gè)發(fā)出請求獲取桶唐,比如圖片,樣式茉兰,js等尤泽,此刻重復(fù)上述請求步驟;
  14. 瀏覽器獲得返回的樣式后開始解析其內(nèi)容规脸,將css構(gòu)建cssom坯约,而根據(jù)具體的屬性來執(zhí)行js的解析和執(zhí)行;
  15. 針對更新后的dom和cssom莫鸭,生成render tree即包含了視覺展現(xiàn)信息的樹闹丐,瀏覽器根據(jù)render tree 來進(jìn)行渲染,即你看到的頁面被因;
  16. 根據(jù)css來對render tree進(jìn)行布局妇智、定位,然后再對定位好的部分進(jìn)行painting氏身,然后你就看到了呈現(xiàn)在你面前的頁面。

css和js加載順序

js

  • 默認(rèn)下惑畴,js的加載時(shí)同步的蛋欣,即遇到<script>標(biāo)簽后立刻就會開始解析js,如果js本身是外部資源如贷,則還會先去請求獲取后再解析陷虎,同時(shí)dom的解析也會因此而暫停到踏,一直等待js解析執(zhí)行后才會繼續(xù)。
  • 對于外部引用的js尚猿,開發(fā)者可以通過給script標(biāo)簽增加defer屬性來使js滯后加載窝稿,這樣就不會影響到dom的解析了,其也會在dom解析后執(zhí)行凿掂,但這種情況下伴榔,務(wù)必要保證js中不會用到document.write()這種直接創(chuàng)建dom node的語句;
  • 除了defer庄萎,h5中新引入了async屬性踪少,可以讓js 保持異步加載,如此js的解析執(zhí)行就是在另一個(gè)線程中進(jìn)行了糠涛。就和dom的解析互不影響了援奢,當(dāng)然,同樣的忍捡,這種情況下集漾,js中也不能有類似document.write()的函數(shù);
  • 同時(shí)砸脊,引擎方面目前也有一定的優(yōu)化具篇,一般來說,webkit或者firefox所用的引擎都會在執(zhí)行某個(gè)腳本的同時(shí)脓规,開啟另一個(gè)線程繼續(xù)處理下面的文檔并請求所需的外部資源栽连。

CSS

雖然css不會影響dom的結(jié)構(gòu),但是因?yàn)閖s對css有獲取權(quán)限侨舆,所以css加載也會因?yàn)閖s的不同而有所不同秒紧。
firefox會在保證css加載后才會加載js;
webkit則智能些,它只會延遲加載那些會因?yàn)閏ss未加載而受到影響的js挨下。
即css的執(zhí)行要優(yōu)先于js熔恢。

js關(guān)鍵詞

js

操作網(wǎng)頁內(nèi)容,實(shí)現(xiàn)功能或效果臭笆。是客戶端(瀏覽器(pc/app嵌入瀏覽器/手機(jī)上))腳本語言

標(biāo)識符

是指變量叙淌、函數(shù)、屬性的名字或者函數(shù)的參數(shù)愁铺。
特征:區(qū)分大小寫鹰霍;
第一個(gè)字符必須是字母、下劃線茵乱、或者是$茂洒。
后面的可以是字母、數(shù)字瓶竭、下劃線督勺、$渠羞。
命名規(guī)約:使用有實(shí)際意義的單詞。
變量使用駝峰規(guī)則智哀,第一個(gè)單詞首字母小寫次询,后面的單詞首字母大寫。變量使用名詞瓷叫,方法函數(shù)使用動詞開頭屯吊,常量全部用大寫字母,函數(shù)創(chuàng)建對象首字母大寫赞辩。

變量

在js中變量是用來保存值的占位符雌芽,定義變量的時(shí)候要使用var運(yùn)算符,后面跟一個(gè)作為名稱的標(biāo)識符即可辨嗽。

弱類型

強(qiáng)類型:在聲明變量的時(shí)候就要標(biāo)識其類型世落。
弱類型:一個(gè)變量用來保存任何類型的數(shù)據(jù)、變量的類型糟需。不是由聲明時(shí)決定(聲明時(shí)只是用了var運(yùn)算符)而是在程序執(zhí)行階段由其值的類型決定的屉佳,隨著程序運(yùn)行其值類型改變,變量類型也會發(fā)生改變洲押。

語句是為了完成某種任務(wù)而進(jìn)行的操作武花。比如:var a=1+2這條語句先用var運(yùn)算符,聲明了變量a杈帐,然后將1+2的運(yùn)算結(jié)果賦值給變量a体箕。js中語句以;結(jié)束,一行可以包含多條語句挑童,如果省略分號不會產(chǎn)生語法錯(cuò)誤累铅,解釋器會自動判斷語句結(jié)束。

注釋

//單行注釋
/**/ 多行注釋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末站叼,一起剝皮案震驚了整個(gè)濱河市娃兽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尽楔,老刑警劉巖投储,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阔馋,居然都是意外死亡玛荞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門呕寝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冲泥,“玉大人,你說我怎么就攤上這事》不校” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵怔球,是天一觀的道長嚼酝。 經(jīng)常有香客問我,道長竟坛,這世上最難降的妖魔是什么闽巩? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮担汤,結(jié)果婚禮上涎跨,老公的妹妹穿的比我還像新娘。我一直安慰自己崭歧,他們只是感情好隅很,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著率碾,像睡著了一般叔营。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上所宰,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天绒尊,我揣著相機(jī)與錄音,去河邊找鬼仔粥。 笑死婴谱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躯泰。 我是一名探鬼主播谭羔,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斟冕!你這毒婦竟也來了口糕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤磕蛇,失蹤者是張志新(化名)和其女友劉穎景描,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秀撇,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡超棺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呵燕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棠绘。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氧苍,到底是詐尸還是另有隱情夜矗,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布让虐,位于F島的核電站紊撕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赡突。R本人自食惡果不足惜对扶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惭缰。 院中可真熱鬧浪南,春花似錦、人聲如沸漱受。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拜效。三九已至喷众,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間紧憾,已是汗流浹背到千。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赴穗,地道東北人憔四。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像般眉,于是被迫代替她去往敵國和親了赵。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ======================第一部分===================== =========...
    65_劉璐閱讀 557評論 0 1
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案甸赃? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,753評論 1 92
  • 問答 1柿汛、CSS和JS在網(wǎng)頁中的放置順序是怎樣的? 一般來說css 放在Head標(biāo)簽里埠对;Js放在body標(biāo)簽里最后...
    Maggie_77閱讀 247評論 0 0
  • 一络断、css和js在網(wǎng)頁中的放置順序是怎么樣的? css一般放在 標(biāo)簽里面项玛。因?yàn)闉g覽器需先渲染css貌笨。 js一般放在...
    瘋小兒閱讀 215評論 0 0
  • 伸手擁抱月光, 用兩分鐘時(shí)間襟沮, 倒空心里的滿锥惋。
    霽青閱讀 219評論 0 0